首頁 > 後端開發 > C++ > 主體

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

DDD
發布: 2024-10-26 01:13:02
原創
626 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!