【发布时间】:2014-02-05 18:26:35
【问题描述】:
抱歉,这可能是一个愚蠢的问题。我在 C++ 方面相对缺乏经验,我正在编写一个带有头文件的小程序。我的 cpp 和 h 文件名中有句点,例如:“file_ver_1.1.cpp”和“file_ver_1.1.h”
在我的头文件中,我有以下代码
#ifndef FILE_VER_1.1_H_
#define FILE_VER_1.1_H_
... some code
#endif
我收到来自编译器的警告,第一行显示“#ifndef 指令末尾的额外标记”,而“宏名称后缺少空格”定义线。 我的头文件名是否因为下划线和/或句点而无效?我已经阅读了这两篇文章,但我并没有真正理解它们,我仍然感到困惑:
http://gcc.gnu.org/onlinedocs/cpp/Macros.html#Macros
http://stackoverflow.com/questions/1653958/why-are-ifndef-and-define-used-in-c-header-files
感谢您的帮助!
【问题讨论】:
-
您的文件名中实际上没有版本信息,是吗?
-
鉴于这是一个相当基本的问题,您可能需要查看 SO 的 list of good C++ books。
-
你的头文件名是不是无效的,但是这真的和头文件的名字没有任何关系,只是你写的包含保护而已。
-
宏名必须是标识符。标识符不是任意字符串;它们可能包含下划线,但可能不包含句点。具体来说,标识符由一个字母或下划线后跟零个或多个字母、下划线或数字组成。以下划线开头的标识符保留给实现使用(尽管它比这稍微复杂一些)。
-
@navr91 包含保护必须对文件是唯一的。如果您使用文件名的 MD5 哈希(以字符为前缀,以防它以数字开头),它也可以正常工作。只要您使用每个头文件唯一的有效标识符,您就可以使您的包含保护您想要的任何东西。
标签: c++