在eclipse中,当创建一个c ++类时,.h文件会自动生成,并带有后卫XXXX_H_
。在我有限的经验中,守卫总是以XXXX_H
的形式出现,而没有尾随_
。
所以,我只是好奇并想知道为什么_
在那边。
提前致谢。
答案 0 :(得分:3)
如果你使用一个相当现代的编译器,你可以用更优雅的指令#pragma once
替换这些守卫
要在Eclipse CDT中修改标题的模板,请转到“Window / Preferences / C ++ / Code Templates / Files / C ++ Header File / Default C ++ header template”并放在那里
${filecomment}
#pragma once
${typecomment}
${declarations}
之后,您的新h文件将从以下内容开始:
/*
* FileServer.h
*
* Created on: Feb 26, 2011
* Author: krit
*/
#pragma once
答案 1 :(得分:3)
可能会添加尾随_
以避免与用户定义的标识符冲突。例如,您可能有一个名为get.h
的头文件,同时您可以想象自己拥有名为GET_H
的宏(或变量或函数)。因此,在GET_H
中使用get.h
for include guard很容易导致问题。
标准库头文件可能使用前导_
来命名其内部宏,以达到同样的目的 - 避免名称与用户定义的标识符冲突。因此,语言规范明确禁止以_
和大写字母开头的用户定义标识符。出于同样的原因,前导 _
不能用于包含警戒的名称。
因此,Eclipse决定使用尾随 _
来达到同样的目的。它为名称冲突提供了合理的保护级别,并且不违反语言规范的要求。
答案 2 :(得分:2)
包含守卫的名称无关紧要,只要它在所有头文件中都是唯一的。
XXXX_H_
很常见,XXXX_H
也是如此。偶尔会使用GUID。
答案 3 :(得分:1)
名称无关紧要,只需要是唯一的。我的猜测是它被添加以使其不太可能与用户创建的定义发生冲突。