守衛我已經看到這樣的代碼通常是在源文件的開始用C目的包括在.c文件
#ifndef _INCLUDE_GUARDS_C
#define _INCLUDE_GUARDS_C
main()
{
}
function1()
{
}
#endif
function2()
{
}
我感到困惑的這個目的..?
我知道如果包括警衛在頭文件定義,但
什麼的這些目的包括在源文件中後衛?和
爲什麼function2()被定義在include guard之外?
守衛我已經看到這樣的代碼通常是在源文件的開始用C目的包括在.c文件
#ifndef _INCLUDE_GUARDS_C
#define _INCLUDE_GUARDS_C
main()
{
}
function1()
{
}
#endif
function2()
{
}
我感到困惑的這個目的..?
我知道如果包括警衛在頭文件定義,但
什麼的這些目的包括在源文件中後衛?和
爲什麼function2()被定義在include guard之外?
在C或C++非頭文件源文件中放入include guard沒有任何好處。
我已經從零開始實施了一個預處理器,並研究了包括關於一個人可以這樣做的警衛,而這完全沒有意義。
至於守衛之外的功能,對我來說看起來就像sl iness。或者,有時當某人有魔法咒語時,他們不確定什麼時候它應該適用,所以他們隨機應用。
我沒有實現預處理器,也沒有學習過守衛,但我仍然可以告訴你,在源文件中使用守衛是毫無意義的(除非你#包含源文件,在這種情況下,我有更強的話) 。 – mah
@mah在這裏似乎沒有比權威更好的爭論,而且沒有其他任何答案可以從評論中分離出來。 – Potatoswatter
我並沒有對你發佈的答案(或者你發佈的答案而不是評論)表達任何擔憂......我只是說在這種情況下,權威並不覺得特別有用。以類比的方式去誇張,如果你告訴我從3層建築中掉落一塊西瓜會導致它撞擊,我不需要聽到你的物理學位以相信你......我會你在你的話:) – mah
老問題,但...
我認爲它可以在測試代碼時使用。測試時,您需要訪問標題中未定義的本地功能,因此您需要包含.c
文件...是的,這很醜陋。是的,你有better options!
對於沒有在標題中定義的函數,您不需要包含保護。
http://en.wikipedia.org/wiki/Include_guard –
在源文件(.c)中請求這些警衛的目的而不是頭文件(.h) – user2798118
沒有任何東西阻止您將來自其他源的源文件文件,除了增加你獲得P45的可能性外。在這種情況下可以使用多個包容性警衛。 – Bathsheba