[英]Why preprocessor doesn't expand type defined later in the code
我的问题相对简单,但对我来说很神秘。
peprocessing后BLA_Str
没有扩展到bla_Str
。 情况是这样的:
#include <stdio.h>
#include <stdint.h>
typedef BLA_Str blaInstance;
#define BLA_Str bla_Str
typedef struct
{
int bla;
}bla_Str;
void main(void){
// printf("%u\n\r",5);
}
预处理器只对文件执行一次传递,在处理过程中扩展宏,并在遇到#define
时将宏添加到其列表中。 当它到达线路时
typedef BLA_Str blaInstance
它还不知道BLA_Str
宏,所以它在输出中保持不变。
您通常应该将所有#define
行放在开头,因此它们会影响文件其余部分中的所有内容。
您可以在The C Book 中找到有关 C 预处理器如何工作的合理总结。 它解释说:
有两种定义宏的方法,一种看起来像函数,另一种则不是。 以下是每个示例:
#define FMAC(a,b) a here, then b #define NONFMAC some text here
这两个定义都定义了一个宏和一些替换文本,它们将用于替换程序其余部分中稍后出现的宏名称。
如果一个宏扩展为另一个宏,则通过重新扫描来处理:
一旦发生上述处理,将重新扫描替换文本加上源文件的以下标记,寻找更多要替换的宏名称。 一个例外是,在宏的替换文本中,宏本身的名称没有扩展。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.