cstdio と stdio.h 名前空間の競合
C 標準ライブラリには、std 名前空間の不可欠な部分である cstdio ヘッダーが含まれています。ただし、ヘッダーの stdio.h バージョンと std バージョンの両方が混在するコードに遭遇することは珍しいことではありません。
std 名前空間の cstdio
リファレンスには、すべての要素が次のように記載されています。 C 標準ライブラリの std 名前空間内に存在します。したがって、printf や scanf などの関数は std 名前空間の一部であり、std 名前空間で std::printf() および std::scanf().
stdio.h として呼び出す必要があります?
stdio.h の状況はさらに微妙です。 C 11 標準によれば、cstdio をインクルードするとシンボル名が std 名前空間にインポートされ、stdio.h をインクルードするとシンボル名がグローバル名前空間にインポートされます。同じことが他の C スタイルのヘッダーにも当てはまります。
名前空間の結合動作
ただし、注意点があります。この標準では、C ヘッダーによって std 名前空間に配置された名前も、グローバル名前空間に配置されたかのように動作することが指定されています。これは、printf や scanf などのシンボルは、主に std 名前空間で定義されていますが、std:: プレフィックスなしでも使用できることを意味します。
実際的な意味
実際これは、stdio.h と std::cstdio の両方を使用するコードには、std::cstdio ヘッダーの前に stdio.h ヘッダーを含める必要があることを意味します。これにより、シンボルがグローバル名前空間で宣言および定義され、std:: 接頭辞なしで使用できるようになります。
結論
std 名前空間が推奨されますが、 C 標準ライブラリ関数にアクセスする方法としては、古い C ヘッダーを使用することも可能です。ただし、潜在的な問題を回避するには、名前空間の影響を認識することが重要です。
以上がここでは、核心的な対立に焦点を当てた、質問ベースのタイトルをいくつか紹介します。 ダイレクト&クリア: * C 名前空間の競合: std::cstdio と stdio.h - どちらを使用するか? * C の stdio.h : Glo を混ぜても大丈夫ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。