0

私は以下の宣言に出くわしました; このマクロの範囲はどうなりますか?

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;
4

3 に答える 3

3

コンパイルの残りの部分全体でマクロ定義が残り、マクロのスコープは設定されません。

于 2012-05-14T11:47:08.780 に答える
0

マクロの「スコープ」はありません。マクロが定義されると、コンパイルユニットの最後まで存在します。(またはまで#undef)。

角かっこで囲まれたブロックのスコープはコンパイラーによって定義されますが、マクロはコンパイル前に置き換えられます。

于 2012-05-14T11:47:57.150 に答える
0

マクロはプリプロセッサディレクティブであり、スコープはありません。

于 2012-05-14T11:49:44.390 に答える