19

这是我在哪里工作的一个问题,所以我做了一点挖掘,答案是 ExpertsExchange 一个。所以我把你交给最初的提问者,Manchung:

我有一个用纯 C 语言编写的项目,用于嵌入式系统。所以,我使用纯 C 来最小化代码大小。

当我编译项目时,我使用 -ansi 标志来确保代码符合 ANSI 标准。然而,使用这个 ansi 标志的缺点是我只能使用 C 风格的注释 (/*comments */)。当我需要使用嵌套注释时,这让我很头疼。

所以,我的问题是:我可以使用哪些开关/标志来允许我使用 C++ 样式的注释(// 注释),同时保持启用 ANSI 检查?

这也几乎总结了我的问题。

4

7 回答 7

28

在最近的 gcc 版本中,-ansi记录为与-std=c89. 新的注释语法仅适用于 C99 标准,因此-std=c99允许。

还有-std=gnu89, 它与所有 gcc 扩展相同,-std=c89但允许所有 gcc 扩展(包括 C++ 样式的注释语法,早在它被添加到标准之前,它就是一个 GNU 扩展)。

还要查看-pedantic标志,它可以为您提供一些有用的警告。

参考:

于 2008-11-10T10:31:44.470 回答
19

如果你想使用 C++ 风格的注释仅仅是因为你想注释掉块,并且对嵌套 /* ... */ 感到头疼,你可以使用这种技术:

#if 0
... code ...
#endif

这实际上也可以完成这项工作。

于 2008-11-10T10:36:55.943 回答
14

您可以使用 -lang-c-c++-comments 预处理器来同时拥有 ANSI 模式和 C++ 样式的注释。

gcc -Wp,-lang-c-c++-comments -c source.c
于 2008-11-10T10:06:31.993 回答
3

如果您-ansi仅用于检查兼容性,那么最简单的方法可能是准备一个脚本或 makefile 目标,将完整的源代码树复制到“ansi”文件夹中,同时修补 // 注释。在伪bash中:

SRC=main.c blip.c blip.h
cp makefile ansi-src/
for F in $SRC do
# does not handle // in string literals or /**/ comments!
sed 's/\/\/.*//g' < $F >ansi-src/$F
done
cd ansi-src
make CFLAGS=-ansi

如果您的 SCC 支持它,也可以将其制成一个提交挂钩,该挂钩在每次提交后以 ANSI 模式在专用机器上自动构建代码,并通过邮件向您发送有关它的报告。

于 2010-07-22T11:51:23.167 回答
0

恐怕编写某种评论重写实用程序(正如 Luther Blissett 所建议的那样)可能是您在这里唯一的选择。在现代版本的 gcc 中,似乎没有任何类型的编译器标志或 CLI 选项可以在使用-ansi-std=c89使用时启用 C++ 样式的注释。

通过从不同的角度接近它,您可能会得到您想要的东西。您可能能够使用编译器标志进行编译-std=c99并使用编译器标志来禁用您不想要的特定于 C99 的扩展(在不了解为什么您需要符合 ANSI 的更多信息的情况下,我不能推荐特定标志)。

于 2010-07-26T20:20:16.670 回答
-2

您可以自动构建一个去掉注释的源代码副本,并在您的程序中使用它。

例如,这看起来很有希望

于 2010-10-11T09:05:21.573 回答
-7

C 已经有近十年的 C++ 风格的注释了,也许你应该升级一下?

于 2008-11-10T10:04:47.177 回答