我有一个用户报告(遗憾的是由于缺少合适的机器而无法验证)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的一部分)。
答案 0 :(得分:2)
我找到了一个适用于cpp
命令的公式:try cpp -xc++
(请注意-x
和c++
之间缺少空格。)
$ 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
本身存在问题。