2017-10-27 20 views
0

-stdフラグは、C++プログラムのコンパイル時に使用したい標準(例:-std=c++11または-std=gnu++11)を指定するために使用することがよくあります。コンパイルで使用されているデフォルトのC++標準がであるかどうかを判断する方法は、一般的に対処されていない質問です(少なくとも私が知る限り、例えばthe highly-upvoted comment by Dennis under the selected answer by Oskar N.を参照してください)。です。どのようにC++標準がC++コンパイラのデフォルトですか?

は、私は(少なくとも++グラム用)のmanページを見て、伝えることが可能であることを信じて、私はこれが正しいかどうかを尋ねてみたかったともより決定的/具体的な方法がある場合:

の下では、 -stdの説明のmanページには、GNU方言を含むすべてのC++標準がリストされています。 1つの特定の基準の下では、それはむしろ目立たないように述べられている。This is the default for C++ code.(C標準に類似する記述がある:This is the default for C code.)。 g++/gcc version 6.4.0ため、これはgnu++14の下にリストされているのに対し、例えば

は、g++/gcc version 5.4.0ため、これは、gnu++98/gnu++03の下にリストされています。

これは自然にデフォルトの標準を示すようですが、と書かれていますので、は私が完全にはっきりしていないことを明白に示しています。これが当てはまる場合、おそらくこれはまったく同じ質問について疑問に思っている他の人にとっては役に立ちます。他のC++コンパイラに便利な方法はありますか?

編集:私はthis related questionに出くわしましたが、その回答はかなり畳み込まれていて、具体的で決定的な記述はありませんでした。たぶん、私はそれが裏付けられたら、その質問に対する答えとしてこれを提出するべきです。

+0

なぜ知りたいのですか? – Yakk

+0

@ Yakk特定のコンパイラのデフォルト値(およびそれらが時間とともにどのように更新されるか)と、余分なフラグを追加する必要があるときは知っておくと便利です。 – PhysicsCodingEnthusiast

+1

「役に立つ」とは、知りたい理由を説明するものではありません。理由を説明する理由を説明しています。 2つ目のポイントは、基本的には常にフラグを追加する必要があります。ここで「デフォルト」を使うのは悪い考えです。 – Yakk

答えて

3

以下の簡単なプログラムのコンパイルと実行はどうですか?

#include <iostream> 

int main() 
{ std::cout << __cplusplus << std::endl; } 

プリント値は、バージョンが使用言うべき:C++ 14

  • ためのC++ 11
  • 201402のためのC++ 98、
  • 201103ため

    • 199711を201703 for C++ 17

    を省略してコンパイルすると0フラグを使用すると、使用する言語のデフォルトバージョンを検出できるはずです。

  • +0

    +1。これはデフォルトのステートメントが掲載されている標準と一致しています(少なくとも私がこの記事で述べた両方のバージョンでは)。ありがとう! – PhysicsCodingEnthusiast

    関連する問題