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

标签 c xcode macos c-preprocessor

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,所以我怀疑这是由于编译器过时所致。

最佳答案

令我有些惊讶的是,我可以使用 /usr 在我的 Mac(macOS Sierra 10.12.2;Apple LLVM version 8.0.0 (clang-800.0.42.1))上重现该问题/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。有关于如何完成这项工作的问题和答案(但这不适合胆小的人)。

关于c - 如何让 Xcode 8 C 预处理器忽略//#defines 中的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603784/

相关文章:

c - 用餐哲学家饥饿的可能性

c - 如何在另一个子进程完成时终止子进程?

ios - 如何在 Xcode 8 中重命名单元测试套件

xcode - 对于面向 iOS 9.0 及更高版本的 iPad 应用程序,需要 83.5x83.5@2x 应用程序图标

python - 在 OS X 中运行进程,查找启动进程

c - 日期或时间更改。从 c 中的磁盘错误重新加载

c++ - 如何为 Solaris 和 HP-AIX 定义 _FILE_OFFSET_BITS & _LARGE_FILES 宏

ios - 为什么Xcode方案中的React(missing)生成目标列表?

java - 如何创建我的 java 项目的 .app 文件以在 mac os 上运行

c++ - Xcode 警告 : "directory not found for option"