2014-02-05 122 views
0

對不起,可能是一個問題。我在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

你的文件名實際上沒有版本信息,對吧? – JustSid

+0

由於這是一個相當基本的問題,您可能想查看SO的[良好C++書籍列表](http://stackoverflow.com/q/388242/1782465)。 – Angew

+1

你的頭文件名是* not *無效,但是這實際上和頭文件的名字沒有任何關係,只是你如何編寫include guard。 – crashmstr

回答

2

事實上,你的頭文件確實是無效的(即使它不是,它也不會做你自己的事情)。句點不是有效的標識符字符,因此宏名稱只是FILE_VER_1

使用include guard宏時,必須設計一個「翻譯」不是合法標識符字符的文件名字符的方案。例如,您可以使用_P_來表示一段時間。所以,你有那麼後衛將是:

#ifndef FILE_VER_1_P_1_H_ 
#define FILE_VER_1_P_1_H_ 

//... 

#endif 

你這樣做究竟是如何最多也就是你(任何其他約定是OK),只要它產生一個合法的標識符。你應該保持一致。