2011-04-26 117 views
0
#include "Ser.h" 
#include ".\ser.h" 

是這樣的\ ser.h是Ser.cpp的一個可執行文件......當右鍵單擊它並按下「打開文檔\ ser.h」時它會去到Ser.h文件...聽不懂,包括頭文件

爲什麼他們再次包含可執行文件(./ ser.h)作爲頭文件....不是頭文件(Ser.h)足以得到所有的錯誤需要被定義。

+1

Wha是你的操作系統。 Windows,我猜? Windows具有不區分大小寫的文件名。 – 2011-04-26 11:44:38

+1

你說什麼「可執行文件」,我不明白 – 2011-04-26 11:45:49

+0

也許利用平臺特定的文件名處理。在你看到這個的地方給出更多的背景? – tenfour 2011-04-26 11:47:07

回答

2

.\ser.h不是一個可執行文件,它只是另一個頭文件。

在文件名不區分大小寫的系統中(因爲它使用的是Windows路徑分隔符\,所以這似乎很有可能),它可能只包含兩次相同的文件。

如果包括守衛被正確使用,那就沒有關係。如果案例相關,他們很可能是兩個不同的文件。

我說「可能」,因爲搜索的頭文件的順序,以及報頭名到頁眉或文件甚至映射,是指實施和xyz.h./xyz.h可在因爲這個不同的地方發現。

1

如果不知道你的包含路徑是什麼,就沒有辦法確定地告訴你。這可能只是在不區分大小寫的平臺(如Windows)上包含相同的頭文件兩次。這可能是一個錯誤,但是由於包括守衛(在文件的開頭和結尾處的那些#ifdef),這是一個無害的錯誤。

看起來好像你無法理解頭文件的目的。沒有這樣的東西,頭文件。頭文件只是功能和類別爲的地方聲明爲,但通常不是定義爲。因此,如果ser.cpp使用common_functions.cpp中定義的某些函數,則應該包含適當的標頭 - 通常將其稱爲common_functions.h

請注意,對於C或C++世界中的幾乎任何東西,都有很多例外,但大多數情況下都是如此。

+0

但是,如果不使用ifdef ...這兩個頭文件都會一個接一個地使用。 – Angus 2011-04-26 11:55:21

+1

@Beata是的,但是頭文件不包含include guard的情況非常罕見。我想不出有一個合法的理由。 – 2011-04-26 11:58:25

+1

某些頭文件被設計爲包含多次,具有不同的行爲,具體取決於當時定義了哪些預處理器宏。 ''是一個來自標準庫的例子。 – 2011-04-26 12:54:30

1

./ser.h不是可執行文件。請注意,以.h結尾的文件擴展名通常是頭文件。

如果您的平臺是Windows,您會發現文件擴展名爲.exe的可執行文件。

一個Ser.h文件足以接收所有的聲明,所以你不需要兩個相同的頭文件。