eclipse的自动生成的.h文件保护

时间:2011-03-19 01:13:32

标签: c++ eclipse-cdt

在eclipse中,当创建一个c ++类时,.h文件会自动生成,并带有后卫XXXX_H_。在我有限的经验中,守卫总是以XXXX_H的形式出现,而没有尾随_

所以,我只是好奇并想知道为什么_在那边。

提前致谢。

4 个答案:

答案 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)

名称无关紧要,只需要是唯一的。我的猜测是它被添加以使其不太可能与用户创建的定义发生冲突。