cstdio stdio.h 命名空間
cstdio 的 C 參考聲明「庫的每個元素都在 std 命名空間內定義」。但是,您發現 std::printf 和 printf 都可以工作,這就提出了 C 頭檔案是否在兩個命名空間中都包含符號的問題。
答案更微妙。
包含 cstdio
包含 cstdio 將符號匯入 std 命名空間,並可能匯入全域命名空間。這是因為 cstdio 包含 stdio.h,這是一個 C 風格標頭。
包含 stdio.h
包含 stdio.h 將符號匯入全域命名空間,並且可能進入 std 命名空間。這是因為 stdio.h 是 C 風格標頭。
相容性功能
在 C 中使用 C 風格標頭是一個相容性功能。 C 11 標準規定,為了與 C 標準函式庫相容,C 標準函式庫提供了 25 個 C 頭文件,包括 cstdio 和 stdio.h。
該標準進一步指出,每個C 頭檔「行為就像每個名稱透過對應的cname 標頭放置在標準庫命名空間中的就是放置在全域命名空間範圍內的。」
結論
綜上所述,當在C 中包含C 樣式標頭時,符號可以導入到std 和全局命名空間中,取決於所使用的特定標頭和編譯器的實作。但是,並不總是保證兩個命名空間將包含相同的符號。
以上是為什麼在 C 中包含'cstdio”時,'printf”可以在沒有'std::”的情況下工作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!