当前位置:  开发笔记 > IOS > 正文

如何让Xcode 8 C预处理器忽略// #defines中的注释

如何解决《如何让Xcode8C预处理器忽略//#defines中的注释》经验,为你挑选了1个好方法。

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进行正确的更换?

关于编译器的注意事项:使用cppmac上最新的(8.2.1,2016年12月)Xcode,所以我怀疑它是由于过时的编译器.



1> Jonathan Lef..:

令我惊讶的是,我可以在Mac上重现问题(macOS Sierra 10.12.2; Apple LLVM version 8.0.0 (clang-800.0.42.1))使用/usr/bin/cpp哪个是XCode cpp- 但不使用GNU cpp(我只使用它调用cpp).

解决方法包括:

/usr/bin/gcc -E -std=c99 test.c

这使用clang包装器gcc来运行C预处理器并正确处理版本.您可以添加一个-v选项,看看它运行的是什么; 我没有看到它cpp本身运行(它运行时clang -cc1 -E有很多其他信息).

您还可以使用:

clang -E -std=c99 test.c

这实际上是一回事.

您也可以安装GCC并使用它而不是XCode.关于如何完成这项工作的答案存在问题(但这不适合胆小的人).


@Schwern:是的 - 我无法弄明白究竟发生了什么,但是`cpp`似乎有一个盲点.好奇 - 等同于一个bug.如果它不会尊重`-std = c99`,它应该抱怨它,而不是默默接受但忽略它.
推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有