gpt4 book ai didi

c - 预处理 #(字符串化)运算符和空格

转载 作者:行者123 更新时间:2023-11-30 15:52:33 27 4
gpt4 key购买 nike

我正在考虑分两个阶段实现 C 预处理器,其中第一阶段将源文件转换为预处理标记数组。这对于简单性和性能都有好处,因为当项目中的多个文件包含头文件时,不需要重做标记化工作。

障碍:

#define f(x) #x
main() {
puts(f(a+b));
puts(f(a + b));
}

根据标准,输出应该是:

a+b
a + b

即关于组成标记是否由空格分隔的信息应该被保留。这将需要废弃两阶段设计。

到目前为止我所看到的 # 运算符的使用实际上并不需要这个,例如如果输出始终为 a + b,无论源文件中的组成标记是否由空格分隔,assert 仍然可以正常工作。

是否有任何现有代码确实依赖于该运算符标准规定的确切行为?

最佳答案

您可能想查看 LCC 的预处理器编译器,作为编译器类(class)的 ANSI C 编译器示例编写。另一个预处理器是 MCPP .

C/C++ 预处理非常棘手,如果您坚持下去,请确保至少获得相关标准的草案,并在某处窃取测试套件。

关于c - 预处理 #(字符串化)运算符和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343571/

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