在閱讀Is this proper C declaration? If so, why does it not work?我在想當包含不同的頭文件時,C實現是否可以隱式地包含標準頭文件?
#include <stdio.h>
int main(void) {
int bool = 0;
return bool == 0;
}
這是程序嚴格符合?換句話說,是否允許stdio.h
包含stdbool.h
還是禁止這樣做?這是由規範指定的嗎?
在閱讀Is this proper C declaration? If so, why does it not work?我在想當包含不同的頭文件時,C實現是否可以隱式地包含標準頭文件?
#include <stdio.h>
int main(void) {
int bool = 0;
return bool == 0;
}
這是程序嚴格符合?換句話說,是否允許stdio.h
包含stdbool.h
還是禁止這樣做?這是由規範指定的嗎?
C標準頭文件不能包含其他頭文件。這與C++不同,它明確允許。
C99標準,部分7.1.3
每個頭聲明或定義在其相關聯的子條款中列出的所有的標識符[...] 沒有其他標識符是保留。
我不確定它是否以任何方式具有權威性,但以下是Plauger說的(授予c89)。
標準C庫提供了15個標準標題。標頭 有幾個屬性
它們是相互獨立的。沒有標準頭文件需要首先包含另一個標準頭文件才能正常工作。 也沒有任何標準標題包含另一個標準標題。
我在c99或c89中找不到任何提及。
EDIT
我可以看到inttypes.h
包括stdint.h
7.8-1
頭
<inttypes.h>
包括頭<stdint.h>
和與由託管實現提供的附加設施延伸它 。
雖然我相信你,你能否給我們一些參考資料(例如K&R)? –
嗯,如果一個頭包含另一個頭,那麼我的程序有效地包含兩個頭。然後,兩個標題的標識符被保留,看來。或者是因爲沒有明確的規定授予這種內容而導致另一個標題包含非法? –
@Johannes - 根據我的理解,這個想法是,某個標題只能包含指定的名稱和一般保留的名稱(這是[...])。如果你想定義'bool',你應該包括。否則它只是'_Bool',你可以在你的例子中使用bool。 –