私はエラーを投げているいくつかのコードを持っています。私は自分自身を生成するためにマクロを使用しています。直感的な方法で文字列配列にアクセスするために使用できる文字列配列と列挙型です。私のコンパイラは私のマクロについて不平を言っていますが、私のコードの残りの部分はまるで私がかなり混乱している列挙体をマクロが正常に作成したかのように動作しているようです。これらのエラー列挙型エラー、変数宣言しません
struct phase_profile* set_defaults;
set_defaults = AI_phases_get_name(PHASE_STRINGS[AI_phase_framerate]);
せずにコンパイルすると思われる。しかし、コンパイラは
マクロ私のFOR_EACH_PHASEの各ラインのために私に次のエラーを与えているような#define FOR_EACH_PHASE(PHASE) \
PHASE(init) \
PHASE(framerate) \
PHASE(priority) \
PHASE(time) \
PHASE(powersave) \
PHASE(performance) \
PHASE(response)
#define GENERATE_ENUM(ENUM) AI_phase_##ENUM,
#define GENERATE_STRING(STRING) "AI_phase_"#STRING,
typedef enum PHASE_ENUM PHASE_ENUM_t;
enum PHASE_ENUM {
FOR_EACH_PHASE(GENERATE_ENUM)
END
};
static const char* PHASE_STRINGS[] = {
FOR_EACH_PHASE(GENERATE_STRING)
};
線をたどるよう
マクロです
error: 'performance' undeclared (first use in this function)
私よりこれについてもっと知っている人のアイデアはありますか?
乾杯
なぜマクロを使用していますか? –
"[...]直感的な方法で" - いいえ、少なくとも私には分かりません。 C言語でプログラムする場合は、C言語でプログラムしてみて、好きな言語に言語を曲げないようにしてください。 – unwind
FOR_EACH_PHASEマクロは各フェーズの他のコードの生成にも使用されるため、マクロを使用しています。フェーズの数とその名前などは変更可能である必要があります。列挙型をハードコードすることはできますが、依然としてマクロ@EdHealが必要です –