gpt4 book ai didi

c - C 预处理器执行多少遍?

转载 作者:太空狗 更新时间:2023-10-29 17:00:41 25 4
gpt4 key购买 nike

C 预处理器对代码进行多少遍处理?

我在 gcc 4.7.2 上测试了以下代码

#define a 5
#define b a
#define c b
#define d c
#define e d
#define f e
#define g f
#define h g
#define j h
#define k j
#define l k
#define m l

int main(void) {return d;}

没有错误:

$ gcc -E 1.c
# 1 "1.c"
# 1 "<command-line>"
# 1 "1.c"
# 14 "1.c"
int main(void) {return 5;}

这是标准行为吗?

最佳答案

C 预处理器一直运行,直到没有更多可扩展的东西为止。这不是通行证的问题;这是一个完整性问题。

它确实避免了宏的递归扩展。一旦宏展开一次,它就不会在替换文本中重新展开。


该标准关于宏扩展限制的唯一说明是在 §5.2.4.1 翻译限制中,它说:

The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits:18)

...

  • 4095 macro identifiers simultaneously defined in one preprocessing translation unit

18) Implementations should avoid imposing fixed translation limits whenever possible.

因此,预处理器必须能够处理至少 4095 个宏,并且如果除了其中一个宏之外的所有宏都按顺序扩展为另一个宏,就像您的示例中那样,结果必须是正确的。

关于c - C 预处理器执行多少遍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13442028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com