「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ で `` を使用すると、`p​​rintf` が `std::printf` と `printf` の両方で機能するのはなぜですか?

C++ で `` を使用すると、`p​​rintf` が `std::printf` と `printf` の両方で機能するのはなぜですか?

2024 年 12 月 21 日に公開
ブラウズ:564

Why does `printf` work in both `std::printf` and `printf` when using `` in C  ?

cstdio Stdio.h Namespace

の C リファレンス ドキュメントでは、すべてのライブラリ要素が std 名前空間内に存在すると主張しています。 。ただし、実験では std::printf と printf 関数呼び出しの両方が機能することが示されています。これは、C ヘッダーがシンボル名を std 名前空間とグローバル名前空間の両方にインポートすることを示していますか?

Answer

を含めると、シンボル名が std 名前空間にインポートされ、潜在的にグローバル名前空間。対照的に、 をインクルードすると、シンボル名がグローバル名前空間にインポートされ、std 名前空間にも組み込まれる可能性があります。

この動作は、すべての C スタイルのヘッダーに拡張されます。 C 11 標準 (付録 D) によると、C 標準ライブラリ ヘッダーは次のように動作します:

"2 それぞれの C ヘッダーは、それぞれ name.h 形式の名前を持ち、それぞれの名前が配置されているかのように動作します。標準ライブラリ名前空間内の対応する cname ヘッダーは、グローバル名前空間スコープ内に配置されます。"

したがって、これらの名前が最初に宣言されるか、名前空間 std 内で定義されるかは不明のままです。 using 宣言を介してグローバル名前空間に挿入される、またはその逆。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3