是C++;在C语言中被认为是糟糕风格的注释? 我和一些学生讨论了C编程风格,当我们谈论评论时,其中一个注意到他在C代码中不使用C++注释,因为它们是个坏主意。事实证明,这是基于个人经验的多行C++评论,但这不是我第一次听到这种说法。因此,>//被认为是有害的,如果是,那么为什么?< P>如果在C中使用C++注释,那么一些C编译器可能不会接受您的代码。我认为这是有害的。 < P>这取决于你使用的是什么版本的C。C99允许//作为注释,而C89不允许

是C++;在C语言中被认为是糟糕风格的注释? 我和一些学生讨论了C编程风格,当我们谈论评论时,其中一个注意到他在C代码中不使用C++注释,因为它们是个坏主意。事实证明,这是基于个人经验的多行C++评论,但这不是我第一次听到这种说法。因此,>//被认为是有害的,如果是,那么为什么?< P>如果在C中使用C++注释,那么一些C编译器可能不会接受您的代码。我认为这是有害的。 < P>这取决于你使用的是什么版本的C。C99允许//作为注释,而C89不允许,c,coding-style,comments,C,Coding Style,Comments,如果您希望尽可能向后兼容,请不要使用它们。但是,我认为这是一个极端的边缘案例。我敢打赌几乎每个人都使用C99 编辑:任何最新版本的GCC都使用大部分C99。您可以在中找到更多信息。C++风格的注释是使用(尚未得到广泛支持)C99标准添加到C中的。虽然标准本身并没有得到广泛的支持,但它的某些部分(如C++风格注释)在几乎每个编译器中都得到支持。考虑到它们是被添加的,这意味着需要它们,所以很容易发现它不会被认为是不好的风格——特别是如果你为自己设定了在哪里使用哪种风格的指导原则 不使用它们的唯一原因

如果您希望尽可能向后兼容,请不要使用它们。但是,我认为这是一个极端的边缘案例。我敢打赌几乎每个人都使用C99


编辑:任何最新版本的GCC都使用大部分C99。您可以在中找到更多信息。

C++风格的注释是使用(尚未得到广泛支持)C99标准添加到C中的。虽然标准本身并没有得到广泛的支持,但它的某些部分(如C++风格注释)在几乎每个编译器中都得到支持。考虑到它们是被添加的,这意味着需要它们,所以很容易发现它不会被认为是不好的风格——特别是如果你为自己设定了在哪里使用哪种风格的指导原则


不使用它们的唯一原因是,如果您想编写格式良好的C89编译器程序。

“/”在C99中受支持,但在C89(目前最受支持的方言)中不受支持。

人们使用
/
而不是
/***/
的一个常见原因是,您可以“嵌套”前者而不是后者,因此,您可以注释掉其中包含注释的代码。但是无论如何,你应该使用
#if 0
来注释C语言中的代码。

根据2004年的标准,C++注释是不允许的。某些行业(汽车,特别是)奖励MISRA兼容的代码,因此,C++评论是不允许的。我相信其他静态代码检查工具(如LDRA等)也是如此



这并不意味着它们天生就不好,但这意味着如果你进入某些行业,并希望在专业上工作,你将被积极地劝阻使用C++风格的评论。除非您维护的代码是专门为使用古代编译器等编译而编写的。

这是一个很好的观点。在过去的20年中,我没有见过这样的编译器,但这将是它有害的唯一原因。OTHH从项目中剔除C++评论花费一个小时最大值?一个小时?最多5分钟编写一个Perl脚本…@Kornel a可以处理字符串文字、有向图和三角图的Perl脚本?5分钟后?你能不能把它也放在一个SO评论中,我很好奇…@Phillip,我把嵌入式开发作为一项工作。他们中的大多数不支持C99,但即使是最早的一次,从C90前的日子允许C++评论作为扩展。@ Pascal,如果你使用有向图和三元组,C++风格的评论不是你最大的问题:PC99没有被广泛支持?当前哪些可用的C编译器不支持C99?我的意思是,至少大多数C99包括//-注释…@maxschlepzig:这很简单-MSVC@Kornel:他说“…至少大多数C99包括//-注释”。我相信你提到的所有工具都支持C99的一个相对较大的子集,包括C++风格的注释。@Kornel,“restrict”和VLAs很简洁,但我认为像stdint.h、long-long-int支持和最重要的指定初始值设定项这样的工具更为重要。VLAs可以很容易地用alloca()模拟,而“restrict”只是优化器的一个提示。@Kornel:gcc至少支持大多数C99,包括VLA和
restrict
——似乎主要围绕新的浮点语义和数学函数。我的标准gcc选项是
-ansi-pedantic-W-Wall
,这使得gcc在拒绝和警告错误代码方面非常严格。它还拒绝
/
注释。如果您想接受c99内容但保持严格性,您可以使用
-std=c99
而不是
-ansi
,但我更希望我的C代码尽可能广泛兼容。老实说,我在编译器选项方面没有太多经验。我仍在学习正确使用指针;)。我是一个PHP爱好者,一个人进入了C/C++领域。我只是知道区别,因为我在高中的时候也有同样的问题。实际上很少有人使用C99。只是大多数C编译器(甚至C90编译器)都接受//作为扩展。@happygreenjacks这正是我要说的+1.大多数编译器都是C90+(也就是说,它们是官方的C90,但有扩展),最普遍支持的扩展可能是
/
注释。实际上,您应该使用版本控制系统来跟踪旧的、未使用的代码;)除非您正在测试一个不应该提交的更改。不,您仍然应该使用版本控制系统。VCS应该已经有了代码的副本,因此您可以安全地将其删除。然后,这是一个简单的问题,就是以后从风投那里复活它。好吧,我是一个Git用户,所以我只是把我写的所有代码都塞进我的本地回购中。然后我在分享之前先清理干净。在你黑客攻击某些功能时记录历史确实很有用,远比用“#if 0”-nastiness;”手动簿记有用得多如果你有“不应该被承诺”的改变,那么你要求你的风投做太多单独的工作。它是用来保存代码的完整历史记录,还是用来帮助不同用户共享代码?当您正在进行黑客攻击并希望存储更改但还不想共享更改时会发生什么情况?分布式VCSE通过将记录历史和共享代码的关注点分离到不同的操作中来解决这个问题
git提交
记录历史,
git拉
/<