加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 17:59:30 所属栏目:百科 来源:网络整理
导读:C预处理器(cpp)似乎应该正确处理此代码: #define A 1 // hello thereint foo[A]; 我希望将A替换为1. 会发生什么是A替换为1 // hello,这导致cpp -std = c99 test.c的以下输出: # 1 "test.c"int foo[1 // hello there]; 哪个是无效的C并且无法编译. 我怎样才
C预处理器(cpp)似乎应该正确处理此代码:

#define A 1 // hello there

int foo[A];

我希望将A替换为1.

会发生什么是A替换为1 // hello,这导致cpp -std = c99 test.c的以下输出:

# 1 "test.c"

int foo[1 // hello there];

哪个是无效的C并且无法编译.

我怎样才能让cpp进行正确的更换?

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

解决方法

令我惊讶的是,我可以使用/usr/bin/cpp(即XCode cpp)重现我的Mac(macOS Sierra 10.12.2; Apple LLVM版本8.0.0(clang-800.0.42.1))上的问题 – 但是没有使用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.关于如何完成这项工作的答案存在问题(但这不适合胆小的人).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读