如何在启用ANSI的情况下在gcc中启用C++样式的注释?

gra*_*eds 19 c c++ gcc comments

这只是我工作的一个问题所以我做了一点挖掘,答案是ExpertExchange.所以我把你交给最初的问题提问者,Manchung:

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

当我编译项目时,我使用-ansi标志以确保代码符合ANSI标准.但是,使用这个ansi标志的缺点是我只允许使用C样式的注释(/*comments*/).当我需要使用嵌套注释时,这让我很头疼.

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

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

Ces*_*arB 26

在最近发布的gcc中,-ansi记录为与之相同-std=c89.新的注释语法仅适用于C99标准,因此-std=c99允许使用.

还有-std=gnu89,它-std=c89允许所有gcc扩展(包括C++风格的注释语法,在它被添加到标准之前很久就是GNU扩展).

还要看一下-pedantic标志,它可以给你一些有用的警告.

参考文献:

  • -std=gnu89 为我工作,我也在寻找主要是 ansi 语义的增强注释。 (3认同)
  • -std = gnu89可能是OP的最佳选择,-std = c99还有其他可能不可取的后果. (2认同)

Joh*_*itb 19

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

#if 0
... code ...
#endif
Run Code Online (Sandbox Code Playgroud)

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

  • 我的回答有什么问题吗?如果你是downvote请评论.您不能嵌套C样式注释,C++样式注释在C++ 89中无效.如果你想要注释掉*代码*,这个`#if 0`几乎是干净利落的唯一方法. (6认同)
  • 这不回答这个问题.它只是避免它. (5认同)
  • @ JohannesSchaub-litb在这样做的过程中,你的答案并没有回答大家点击这个链接想要解决的问题,而且不那么一般.所以,不,它并不优越.它有助于OP,但对大多数稍后点击链接的人没有帮助.这就是StackOverflow的全部内容. (5认同)

phi*_*ant 14

您可以使用-lang-c-c ++ - 注释预处理器同时具有ANSI模式和C++风格的注释.

gcc -Wp,-lang-c-c++-comments -c source.c
Run Code Online (Sandbox Code Playgroud)

  • 我相信这不再受支持了.我无法在Mac或Linux上使用GCC 4.2或4.4.我只能在GCC的CPP手册中找到这个参考(回到2.9版本)"注意:以前版本的cpp接受了一个`-lang`选项,它选择了语言和标准一致性级别.这个选项已被删除,因为它与`-l`选项冲突." 我找不到替代品. (9认同)
  • 我认为你的是明确的答案. (2认同)

180*_*ION -7

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

  • 这就是他正在尝试做的事情——用 C++ 风格的注释从 C89 升级到 C89。鉴于他说目标是嵌入式系统,因此它不太可能具有符合 C99 的编译器。甚至 GCC 也没有实现 C99。 (2认同)