首頁  >  文章  >  後端開發  >  為什麼在 C 中包含“cstdio”時,“printf”可以在沒有“std::”的情況下工作?

為什麼在 C 中包含“cstdio”時,“printf”可以在沒有“std::”的情況下工作?

DDD
DDD原創
2024-10-26 01:13:02627瀏覽

 Why Does `printf` Work Without `std::` in C   When `cstdio` is Included?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn