对不起,这可能是一个愚蠢的问题。我在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
感谢您的帮助!
答案 0 :(得分:2)
实际上,你的头文件确实是无效的(即使它不是,它也不会做你想要的那样)。句点不是有效的标识符字符,因此宏名称只是FILE_VER_1
。
使用包含保护宏时,您必须设计一个“翻译”非合法标识符字符的文件名字符的方案。例如,您可以使用_P_
来表示句点。因此,你的包括后卫将是:
#ifndef FILE_VER_1_P_1_H_
#define FILE_VER_1_P_1_H_
//...
#endif
你究竟是如何做到这一点取决于你(任何其他约定都可以),只要它产生一个合法的标识符。你应该保持一致。