繁体   English   中英

为什么预处理器不扩展代码中后面定义的类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM