C++ 使cpp(C预处理器)删除C++;对MacOSX的评论

C++ 使cpp(C预处理器)删除C++;对MacOSX的评论,c++,macos,gcc,c-preprocessor,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 < /代码>被用作部分).尝试将-xc++或-xc-std=c99

我有一个用户报告(不幸的是,由于缺少合适的机器,无法验证它),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 < /代码>被用作部分).

尝试将
-xc++
-xc-std=c99
添加到命令行。

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

 -E                       Preprocess only; do not compile, assemble or link
这确实去除了MacOSX上的
/
注释


然而,我仍然很好奇为什么
cpp
本身会有问题。

我发现了一个与
cpp
命令一起工作的公式:尝试
cpp-xc++
(注意
-x
c++
之间缺少空格)

现在“
-xC++
”应该可以用了,而且在我的Linux机器上也可以用(GCC4.4,但我记得它早在GCC2.95时就可以用了),所以苹果似乎打破了它


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

这是我向用户建议的第一件事,他尝试了。。。没有帮助。这对你有用吗?威尔克斯的方法应该有用;请让你的用户准确描述他们做了什么,他们期望发生什么,以及发生了什么。@Zack:你试过并看到它起作用了吗?@Zack:我刚刚试过。我也不能让cpp放弃
/
风格的评论。@JeremyP:谢谢!最后一个回复是backingI承认我很惊讶我的cpp是基于GCC4.2.1的,它也是mty目前安装的C编译器
gcc-E
工作正常,但是
cpp
无法与任何-x选项或
-std=c99
一起工作,谢谢您的努力。我将要求用户尝试并报告发生的情况(没有机器以这种方式在手是很烦人的:-/)您能确认这对通过
cpp运行的完整文件有效吗(如<代码> CPP-XC++ + <代码>,不仅与Prttf命令不一样,它也不作为<代码> CPP -XC++< /COD>,除非<代码> <代码>有C++扩展。这是苹果的另一个bug。我没有主意了,我只能建议使用<代码> CPP -XC++< <代码>作为解决方案。或者<代码> GCC—E <代码>。
$ 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