在eclipse中,当创建C++类时,.h文件的自动生成与后卫XXXX_H_
。在我有限的经验中,后卫总是以XXXX_H
的形式出现,没有落后_
。eclipse自动生成的.h文件警卫
所以,我只是好奇,想知道为什么_
在那里。
在此先感谢。
在eclipse中,当创建C++类时,.h文件的自动生成与后卫XXXX_H_
。在我有限的经验中,后卫总是以XXXX_H
的形式出现,没有落后_
。eclipse自动生成的.h文件警卫
所以,我只是好奇,想知道为什么_
在那里。
在此先感谢。
可能会添加尾随_
以避免与用户定义的标识符冲突。例如,您可能有一个名为get.h
的头文件,同时您可以想象拥有名为GET_H
的自己的宏(或变量或函数)。因此,使用GET_H
作为包含后卫的get.h
很容易导致问题。
标准库头文件可能使用前导_
来为了同一目的命名其内部宏 - 以避免与用户定义标识符的名称冲突。因此,语言规范明确禁止以_
开头的用户定义标识符和大写字母。而且基于同样的原因,前导_
不能用于包含守卫的名称。
因此,Eclipse决定使用一个尾随_
出于同样的目的。它提供了一个合理的名称冲突防护级别,并且不违反语言规范的要求。
只要它在所有头文件中都是唯一的,那么无所谓内含值守的名称是什么。
XXXX_H_
很常见,因为是XXXX_H
。偶尔使用GUID。
该名称是无关紧要的,它只需要是唯一的。我的猜测是,它被添加使它不太可能与用户创建的定义发生冲突。
如果您使用的是比较现代的编译器,你可以用更优雅的指令#pragma once
替换这些守卫若要修改标题在Eclipse CDT的模板,进入“窗口/首选项/ C++ /代码模板/文件/ C++头文件/默认的C++头模板”,并把有
${filecomment}
#pragma once
${typecomment}
${declarations}
这之后你的新的H文件从东西像这样开头:
/*
* FileServer.h
*
* Created on: Feb 26, 2011
* Author: krit
*/
#pragma once
#pragma曾经是优雅的,除非它不起作用! –
2011-03-19 06:26:22
请您详细说明一下吗? – Krit 2011-03-19 09:40:05
用最高分检查答案 - #pragma一旦没有问题,除非它不起作用。有时编译器无法确定两个文件是相同的还是不同的。那么会发生什么? – 2011-03-19 11:19:02