web-dev-qa-db-ja.com

コンパイラー標準サポート(c ++ 11、c ++ 14、c ++ 17)

GCCコンパイラがサポートする標準を見つけるにはどうすればよいですか?コンパイル時にどのC++標準が使用されているか(定義された定数のチェック)を確認する方法を意味しているわけではありませんが、コンパイルする前に、使用可能な標準をどのように確認できますか(フラグ-std=c++??の場合)?

情報はman g++にはありません。

オプションを手動で試す以外に、g++ --versionでgccバージョンを確認できますか?

GCCのバージョンとサポートされている標準のどこかの表を見つけることは可能ですか?

6
Šimon Hrabec

この情報は、GCC公式Webサイトで入手できます。関連する表は次のとおりです。

C++ 11機能のサポート

C++ 14機能のサポート

C++ 17機能のサポート

8
Igor R.

gccとg ++には、これをチェックするコマンドラインオプションがありません。 -vオプションがサポートされている標準について何かを伝えるのは素晴らしいことです。代わりに、 gcc Standards のオンラインドキュメントと cppreference.com の便利な概要を確認できます。

cppreferenceによると、c ++ 11の完全サポートはgcc 4.8.1に付属しています。

代わりに、c ++ 14(c ++ 17のいくつかの新機能を含む)を完全にサポートするには、gcc 5.0以降が必要です。

5
oldMammuth

@oldMammuthが作成したコメントはほぼ正しいです。gccg++には、実際にサポートする言語標準を出力する方法があります。十分に文書化されていません。 --help引数のヘルプテキストの下の括弧内にリストされていない場合は、基本的に非表示だったと思います。これを行う方法は、GNUコンパイラツールチェーンを実行し、使用している特定のコンパイラインスタンスに--helpテキストを要求することです。実際にこれを実行した後、これを学習しました私自身のプロジェクトの調査ですが、1つのプログラムの下にコンパイラーのバンドル全体をバンドルするために、gccg++はまさにそれを行います。彼らはメインの実行可能ファイルを使用して、コンパイラ、アセンブラ、およびリンカーのプロセス。ヘルプテキストにアクセスして、特定のコンパイラバージョンのサポートされている言語標準を取得するには、gccまたはg++ではなく、コンパイラに問い合わせる必要があります。

この時点で、両方のコマンドを入力するのに飽きてきたので、残りの部分では、gccを使用していると想定します。どちらのコマンドも実質的に交換可能であり、基本的に同じ名前の異なる仲介者であるという事実にもかかわらず。

gcc -print-prog-name=cc1を使用すると、上記のコンパイラへのパスを取得できます。私のシステムでは、これは/usr/lib/gcc/x86_64-linux-gnu/8/cc1です。次に、上記の実行可能ファイルを--helpパラメータを指定して呼び出すだけで、準備は完了です。 注意何百ものヘルプパラメータエントリがあります。実際に出力をgrepにパイプして使用することをお勧めしますそれらを見つけるための正規表現。そうでなければ、非常に多くの追加情報があり、本当に煩わしいからです。

代替:

gccヘルプテキストに記載されているgcc -v --helpを使用して、特定のツールチェーン内の各プログラムのヘルプダイアログを印刷できます。 ただし、これにより多くの出力が得られます。

ここでも、正規表現を使用して出力を検索し、サポートされている標準バージョンを見つけることをお勧めします。 gccは、CやC++よりも多くの言語をサポートしています。これには、FortranやGoが含まれますが、これらに限定されません。

4
Ruby A. Rose