导致cpp(C预处理器)删除Mac OS X上的C ++注释

时间:2010-11-09 19:57:53

标签: c++ macos gcc c-preprocessor

我有一个用户报告(遗憾的是由于缺少合适的机器而无法验证)Mac OS X 10.6.4上的C预处理器(cpp)命令没有删除C ++ / C99双斜杠//来自其处理的文件的评论,无论它给出了什么选项。这是gcc版本:

 i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)

是否有可能以某种方式导致它删除此类注释,正如人们对C ++预处理器所期望的那样(这是必需的,因为cpp被用作another tool的一部分)。

3 个答案:

答案 0 :(得分:2)

我找到了一个适用于cpp命令的公式:try cpp -xc++(请注意-xc++之间缺少空格。)

$ printf '/* block comment */\n// line comment\nnot a comment\n' | cpp -xc++
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"


not a comment

对比:

$ printf '/* block comment */\n// line comment\nnot a comment\n' | cpp -x c++
i686-apple-darwin10-gcc-4.2.1: c: No such file or directory
i686-apple-darwin10-gcc-4.2.1: c++: No such file or directory
i686-apple-darwin10-gcc-4.2.1: warning: '-x -x' after last input file has no effect
i686-apple-darwin10-gcc-4.2.1: no input files

现在'-x c++'支持工作,并且可以在我的Linux机器上工作(使用gcc 4.4,但我记得它早在gcc 2.95上工作),所以Apple似乎打破了它。

我真的必须再次强调为这些问题提供完整,精确的测试用例的重要性。我昨天没有想到找到Apple引入了一个bug,因为我知道wilx的答案应该有效,并且在没有准确描述OP用户尝试的内容的情况下,它是更有可能的是,他们在他们的实际命令行上还有别的东西正在否定它。如果上面显示的命令行和错误消息在原始问题中提供,那将更有效地针对每个人的注意力。

答案 1 :(得分:0)

尝试在命令行中添加-x c++-x c -std=c99

答案 2 :(得分:0)

似乎有效的一个部分解决方案是调用gcc -E而不是cpp

 -E                       Preprocess only; do not compile, assemble or link

这确实剥离了Mac OS X上的//条评论。

但是,我仍然很好奇为什么cpp本身存在问题。