1. ホーム
  2. c++

[解決済み] C++でCの標準関数を使用する場合、"std:: "という接頭辞は必要でしょうか?重複] [重複] [重複] [重複

2022-03-08 15:23:22

質問

C++でC言語の標準的な関数を使用する場合、すべての関数の前に std:: ?

例えば(ファイル名。 std.C ):

#include <cstdio>

int main() {
  std::printf("hello\n");
  printf("hello\n");
}

このファイルをコンパイルすることができます。

g++ -Wall -Werror -std=c++11 std.C

をエラーなしで実行します。

私の質問は

  1. を常に配置する必要があります。 std:: C++で標準Cライブラリ関数を使用する場合、すべての関数の前に置く必要がありますか?
  2. のようなヘッダーファイルと何が大きく違うのでしょうか? <stdio.h><cstdio> ?

解決方法は?

<ブロッククオート

C++のライブラリは、C言語と同じ定義が含まれています。 ライブラリは、同じ構造のヘッダーファイルで構成されています。 以下のような違いがあります。

  • 各ヘッダーファイルは、C言語版と同じ名前ですが、".を付けています。 c "という接頭辞をつけ、拡張子はつけない。例えば、C++に相当する C言語のヘッダーファイルの場合 <stdlib.h><cstdlib> .
  • ライブラリの各要素は std 名前空間を使用します。

とはいえ、Cとの互換性を保つために、従来のヘッダー名である name.h (例えば stdlib.h も同じ定義で提供されています。 C++では非推奨ですが、グローバル名前空間内で使用することができます。

( ソース )

std:: の部分は std::printf() の呼び出しは、標準ライブラリで名前を使用する標準的な方法なので、これを使用することをお勧めします。