0

以前の質問で、次のソース コードで値を定義するには、何らかの理由で列挙型を使用する必要があることがわかりました。

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 (cloud pebble.com) で実行することを意図したこのコードでは、値は電話で実行されている別の JS アプリから取得され、その値を受け取ります。ただし、ここで見られるように、その整数を列挙子に変換したいと思います (理由はここにあります:初期化子要素は定数ではありませんか? )。コードは次のエラーを吐き出します。

    ../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]

整数を列挙子に変換するにはどうすればよいですか?

4

1 に答える 1

0

あなたのコードは、C がどのように機能するかについていくつかの根本的な誤解を示しています。たとえば、スイッチの場合の列挙型はまったく意味がありません。列挙型はコンパイル時に値を宣言しますが、スイッチは実行時に制御フローに使用されます。

C に関する初心者向けの本を見つけて、いくつかの基本的な例から始めてください。

于 2015-05-16T16:03:43.220 に答える