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.关于如何完成这项工作的答案存在问题(但这不适合胆小的人).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。