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,它们是编译的一部分,但比解释类型定义
要早得多。