【发布时间】:2017-05-27 00:08:26
【问题描述】:
C 预处理器 (cpp) 似乎应该正确处理此代码:
#define A 1 // hello there
int foo[A];
我希望将A 替换为1。
发生的情况是A 被1 // hello there 替换,这导致cpp -std=c99 test.c 的以下输出:
# 1 "test.c"
int foo[1 // hello there];
这不是有效的 C 并且无法编译。
我怎样才能让cpp 执行正确的替换?
关于编译器的注意事项:在 mac 上使用最新(8.2.1,2016 年 12 月)Xcode 中的cpp,所以我怀疑这是由于编译器过时造成的。
【问题讨论】:
-
我认为预处理器对 cmets 一无所知。为什么不直接使用
/* */块评论? -
我无法重现此内容 (ideone.com/hfQunc)。你用的是什么编译器?
-
请注意,
//不是有效的 ISO C 注释,它是在 C99 中引入的。确保您使用 C99 标准进行编译(和预处理)。 -
你是如何调用你的预处理器的?
-
@LưuVĩnhPhúc 评论不参与预处理。我们在这里看到的是从预处理器获取文本输出的工件,这是标准之外的东西。
标签: c xcode macos c-preprocessor