2014-01-30 2 views
0

Я натолкнулся на следующий код и, похоже, не понимаю, что здесь происходит. Перечисление pattern никогда не менялось, так зачем делать switch?Корпус выключателя на перемычке, которая никогда не изменяется

enum pattern { PAT_ZERO, PAT_SEQ, PAT_PIPE }; 
static enum pattern pattern; 

static ssize_t fill_in_buf(struct thread *ignore, void *buf, size_t nbytes) 
{ 
    size_t i; 
    __u8 *p; 

    (void)ignore; 

    switch (pattern) { 
    case PAT_ZERO: 
     printf("fill_in_buf PAT_ZERO\n"); 
     memset(buf, 0, nbytes); 
     break; 

    case PAT_SEQ: 
     printf("fill_in_buf PAT_SEQ\n"); 
     for (p = buf, i = 0; i < nbytes; ++i, ++p) 
      *p = i % 63; 
     break; 

    case PAT_PIPE: 
     printf("fill_in_buf PAT_PIPE\n"); 
     return fread(buf, 1, nbytes, stdin); 
    } 

    return nbytes; 
} 
+0

Уверены ли вы? Код от http://lxr.free-electrons.com/source/tools/usb/ffs-test.c#L362 – tzippy

+0

Является ли 'pattern' изменена какой-либо другой функцией? – tabstop

+1

@GrijeshChauhan Почему? enum pattern! = pattern – this

ответ

0

Это похоже на тестовый/отладочный код, программист хотел несколько вариантов на выбор.

Это совершенно неожиданно написано, как правило, вы увидите это с препроцессором и #if defined, чтобы выбрать один путь кода.

двух первых линий может быть разъяснена:

static const enum { PAT_ZERO, PAT_SEQ, PAT_PIPE } pattern = PAT_ZERO; 

Так как нет смысла вводить имя для перечисления, или делает переменную не- const.

Смежные вопросы