[解決済み] C++でC言語のヘッダーを使う場合、std::とグローバル名前空間のどちらから関数を使うべきでしょうか?
2022-05-14 08:46:43
質問
C言語はC++のサブセットです。ですから、名前を少し変えることで、C++でCの関数/ヘッダのほとんどを使うことができます(
stdio.h
を
cstdio
,
stdlib.h
から
cstdlib
).
私の質問は、実際には意味的なものです。C++コード(GCCコンパイラの最新バージョンを使用)において、私は以下を呼び出すことができます。
printf("Hello world!");
と
std::printf("Hello world!");
で、全く同じように動作します。そして、私が使っているリファレンスでは、次のように表示されます。
std::printf("Hello world!");
.
質問ですが
std::printf();
を使用する方が良いのでしょうか?違いがあるのでしょうか?
どのように解決するのですか?
C++11 Standard から(強調)。
D.5 C標準ライブラリヘッダ [depr.c.headers]
- C標準ライブラリとの互換性のために...
- すべてのCのヘッダは、それぞれ、以下のような形式の名前を持っています。 name.h という形式の名前を持つすべてのCのヘッダは、対応する標準ライブラリ によって標準ライブラリの名前空間に置かれた各名称は、対応する cname ヘッダによって標準ライブラリ名前空間に置かれた各名称は グローバル名前空間 スコープ内に配置されます。これは これらの名前が最初に宣言されるか、名前空間スコープ内で定義されるかは不特定です。 (3.3.6) の 名前空間が std であり、その後、明示的なusing宣言によってグローバルな名前空間スコープに注入されます (7.3.3)。
- 例です。 ヘッダ
<cstdlib>
確実 はその宣言と定義を提供します。 を名前空間std
. また、グローバル名前空間内でこれらの名前を提供することもできます。ヘッダ<stdlib.h>
確実 は、同じ宣言と定義を提供する をグローバル名前空間内で を提供します。また また、これらの名前を名前空間std
.
name.h" ヘッダの使用は非推奨です。将来のリビジョンで削除される候補として特定されました。
そこで、"cname" ヘッダを含めるようにし、宣言と定義を
std
名前空間の宣言と定義を使用することをお勧めします。
何らかの理由で "name.h" ヘッダを使用しなければならない場合(非推奨、上記参照)、グローバル名前空間からの宣言と定義を使用することをお勧めします。
言い換えれば、好む
#include <cstdio>
int main() {
std::printf("Hello world\n");
}
以上
#include <stdio.h>
int main() {
printf("Hello world\n");
}
関連
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] std::move()とは何ですか?また、どのような場合に使用するのですか?
-
[解決済み] 関数/メソッドのキーワード 'inline' はいつ書けばよいのですか?
-
[解決済み] noexceptを本当に使うべきはいつですか?
-
[解決済み] C++で'friend'はいつ使うべきですか?
-
[解決済み] C++11でconstexpr機能はいつ使うべきですか?
-
[解決済み】C++でnewキーワードはいつ使うべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】C++の余分な資格エラー
-
[解決済み】Enterキーを押して続行する
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] C++でCの標準関数を使用する場合、"std:: "という接頭辞は必要でしょうか?重複] [重複] [重複] [重複
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?