2015-05-16 2 views
0

В предыдущем вопросе я спросил, я узнал, что я должен был использовать перечисление по какой-либо причине, чтобы определить свои ценности в следующем исходном коде:переосмысления в Enum/Global Enum значения в C

enum { key0_buffer = 0}; 
void process_tuple(Tuple *t) 
{ 
    //Get key 
    int key = t->key; 

    //Get integer value, if present 
    int value = t->value->int32; 

    //Decide what to do 
    switch(key) { 
    case key_0: 
     enum {key0_buffer = value};  
     break; 
    }; 
} 
... 
static WeatherAppDataPoint s_data_points[] = 
{ 
    { 
     ... 
     .high = key0_buffer, 
    }, 
}; 

В этом код, предназначенный для работы на Pebble Watch (облачный pebble.com), значение исходит из отдельного приложения JS, работающего на телефоне, и затем получает это значение. Однако, как видно здесь, я хочу превратить это целое число в счетчик (причина здесь: initializer element not constant?). Код содержит следующие ошибки:

../src/app_data.c:120:5: error: a label can only be part of a statement and a declaration is not a statement 
../src/app_data.c:120:11: error: enumerator value for 'key0_buffer' is not an integer constant 
../src/app_data.c:109:9: error: variable 'value' set but not used [-Werror=unused-but-set-variable] 

Как преобразовать целое число в перечислитель?

+0

Это не имеет большого смысла. Похоже, вы пытаетесь инициализировать глобальную статическую переменную тем, что, по-видимому, будет установлено только после вызова функции (т. Е. Во время выполнения). Перечисления - это константы, вы не можете изменить их значение. – Mat

+0

@Mat Большое спасибо. Это помогло, я думаю, мне нужно изменить структуру этого кода. – AgentSpyname

ответ

0

Ваш код показывает некоторые фундаментальные недоразумения в том, как работает C. Например, перечисление в корпусе коммутатора не имеет смысла. Перечисление объявляет значения во время компиляции, в то время как во время исполнения используется переключатель для потока управления.

Вы должны найти книгу начинающих на C и начать с некоторых основных примеров.

+1

Да, его истинный, я больше похожий на JS, Python и Rails, работающий с языками более высокого уровня. В книге о C я никогда не говорил об Enums ... Но, спасибо за этот совет, я, вероятно, собираюсь купить лучшую книгу. – AgentSpyname