gpt4 book ai didi

c++ - C 预处理器是否在运行中进行了多次处理?

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:27 25 4
gpt4 key购买 nike

我最近遇到了“多 channel 编译器”这个术语。本质上,任何编译器都可以通过不止一次传递来解析源代码。

这让我开始思考,C 预处理器是否在运行中进行多 channel 处理?

假设我有以下 C 代码。

int bar = foo;

#define foo 1

这在直通中起作用的唯一可能方式是预处理器一直遍历代码以查找预处理器指令,然后返回代码以进行替换。

这是预处理器的功能吗?

最佳答案

So that got me thinking, is the C pre-processor multi-pass in operation?

不一定是,通常也不是。

int bar = foo;

#define foo 1

宏仅从其定义点(#define 行)到文件末尾(或相应的#undef)可见。在上面,第一行没有替换为int bar = 1;;相反,它仍然是 int bar = foo;,只有当已经声明了 foo 时它才有效。 (该声明将被 #define 隐藏,但仅用于宏定义之后的引用。)

预处理器(更准确地说,是前几个翻译阶段)的行为旨在允许单次执行。有关规范,请参阅 C 标准(N1570 是最新草案)第 5.1.1.2 节。 “预处理器”通常对应于阶段 1 到 4,或者可能对应于阶段 1 到 5。

关于c++ - C 预处理器是否在运行中进行了多次处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37175741/

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