私は以下の宣言に出くわしました; このマクロの範囲はどうなりますか?
typedef struct Hdr_s {
#define MACRO1 1
#define MACRO2 2
#define MACRO3 3
unsigned char Flag;
unsigned char Offset;
unsigned short cpy_len_offset;
unsigned char cpy_offset;
}Hdr_t;
私は以下の宣言に出くわしました; このマクロの範囲はどうなりますか?
typedef struct Hdr_s {
#define MACRO1 1
#define MACRO2 2
#define MACRO3 3
unsigned char Flag;
unsigned char Offset;
unsigned short cpy_len_offset;
unsigned char cpy_offset;
}Hdr_t;
コンパイルの残りの部分全体でマクロ定義が残り、マクロのスコープは設定されません。
マクロの「スコープ」はありません。マクロが定義されると、コンパイルユニットの最後まで存在します。(またはまで#undef
)。
角かっこで囲まれたブロックのスコープはコンパイラーによって定義されますが、マクロはコンパイル前に置き換えられます。
マクロはプリプロセッサディレクティブであり、スコープはありません。