2011-03-19 73 views
2

在eclipse中,当创建C++类时,.h文件的自动生成与后卫XXXX_H_。在我有限的经验中,后卫总是以XXXX_H的形式出现,没有落后_eclipse自动生成的.h文件警卫

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

在此先感谢。

回答

3

可能会添加尾随_以避免与用户定义的标识符冲突。例如,您可能有一个名为get.h的头文件,同时您可以想象拥有名为GET_H的自己的宏(或变量或函数)。因此,使用GET_H作为包含后卫的get.h很容易导致问题。

标准库头文件可能使用前导_来为了同一目的命名其内部宏 - 以避免与用户定义标识符的名称冲突。因此,语言规范明确禁止以_开头的用户定义标识符和大写字母。而且基于同样的原因,前导_不能用于包含守卫的名称。

因此,Eclipse决定使用一个尾随_出于同样的目的。它提供了一个合理的名称冲突防护级别,并且不违反语言规范的要求。

2

只要它在所有头文件中都是唯一的,那么无所谓内含值守的名称是什么。

XXXX_H_很常见,因为是XXXX_H。偶尔使用GUID。

1

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

2

如果您使用的是比较现代的编译器,你可以用更优雅的指令#pragma once

替换这些守卫若要修改标题在Eclipse CDT的模板,进入“窗口/首选项/ C++ /代码模板/文件/ C++头文件/默认的C++头模板”,并把有

${filecomment} 

#pragma once 

${typecomment} 
${declarations} 

这之后你的新的H文件从东西像这样开头:

/* 
* FileServer.h 
* 
* Created on: Feb 26, 2011 
*  Author: krit 
*/ 

#pragma once 
+0

#pragma曾经是优雅的,除非它不起作用! 2011-03-19 06:26:22

+0

请您详细说明一下吗? – Krit 2011-03-19 09:40:05

+0

用最高分检查答案 - #pragma一旦没有问题,除非它不起作用。有时编译器无法确定两个文件是相同的还是不同的。那么会发生什么? – 2011-03-19 11:19:02