cstdio stdio.h 命名空間
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和全域命名空間中,取決於所使用的特定標頭和編譯器的實作。但是,並不總是保證兩個命名空間將包含相同的符號。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3