C 结构内部定义的宏的范围是什么?

C 结构内部定义的宏的范围是什么?,c,C,我看到了下面的声明;这个宏的范围是什么 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;

宏定义保留在编译的整个剩余部分,宏没有作用域。

宏定义保留在编译的整个剩余部分,宏没有作用域。

宏没有“作用域”,一旦定义,它们就一直存在,直到编译单元结束。(或直到
#unde

用括号括起来的块的范围由编译器定义,而宏在编译之前被替换。

宏没有“范围”,一旦定义,它们就一直存在,直到编译单元结束。(或直到
#unde


括号内的块的作用域由编译器定义,而宏在编译之前被替换。

宏是预处理器指令,它们没有作用域。

宏是预处理器指令,它们没有作用域。

是在第一次使用结构之后吗?@lxusr,这些宏与该结构无关。您也可以将它们放在文件的开头。它们不是汇编的一部分。当编译器开始编译该文件时,
#define
行将被完全删除,就好像它们从未存在过一样。这些只是预处理器的全局定义,它们与编译器或代码无关。不,它与结构的使用无关。宏只是文本替换,在第一次满足
#define
时会执行操作。@Radu,它们是编译的一部分,但比解释
typedef
要早得多。是在第一次使用该结构之后吗?@lxusr,这些宏与该结构无关。您也可以将它们放在文件的开头。它们不是汇编的一部分。当编译器开始编译该文件时,
#define
行将被完全删除,就好像它们从未存在过一样。这些只是预处理器的全局定义,它们与编译器或代码无关。不,它与结构的使用无关。宏只是文本替换,一旦第一次满足
#define
的要求,就可以执行操作。@Radu,它们是编译的一部分,但比解释
类型定义
要早得多。