#endif合法后是否有令牌?

Joe*_*e.F 8 c++ standards-compliance include-guards

我目前正在执行以下操作,编译器(MSVC2008 /以及2010)没有抱怨它,但我不确定这是不是一个坏主意:

#ifndef FOO_H_
#define FOO_H_

// note, FOO_H_ is not a comment:
#endif FOO_H_
Run Code Online (Sandbox Code Playgroud)

我以前总是写它,#endif // FOO_H_但我发现自己今天不这样做,并认为它很奇怪,因为显然我暂时没有做评论方法.

这是不好的做法,我应该通过我的所有标题和修复(它是一个跨平台的应用程序)或者是否可以保持它的方式?

Mic*_*urr 6

严格地说(根据标准中的语法)#endif在同一行上的指令之后不允许使用令牌(评论是可以的,因为它们在翻译的早期阶段被移除而不是预处理指令 - 阶段3与4).

但是,MSVC似乎允许它 - 我不会继续寻求解决这些问题(因为它们不会导致问题),但是当您修改具有它们的标头时,可能会做出精心修复它们.

当然,如果您的其他受支持的编译器发出有关它们的诊断信息,则修复它们可能更为紧迫.


wil*_*ilx 5

这是不行的,它是无效的,AFAIK.许多编译器忽略了之后的额外文本,#endif并且经常会对此发出警告.您应该添加//以使其成为评论.