6

-ansi と -std=c++11 が一緒に動作しないのはなぜですか? (ANSI は、他の回答に従って C++98 に戻ります) g++-4.8 を使用しています。

C++11 の ANSI 承認は次のとおりです。

http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2012

これは私を困惑させます。ありがとう!

4

3 に答える 3

12

RTFM :

-ansi
C モードでは、これは と同等-std=c89です。C++ モードでは、 と同等-std=c++98です。

このフラグは、複数のバージョンの標準が存在する前に追加されたものであり、フラグの意味は今でも同じです。

とにかく両方を使いたいのはなぜですか?それを使用したい場合は-std=c++11、矛盾する何かを意味する別のフラグを追加しないでください。

于 2013-07-05T11:50:44.003 に答える
3

それらは単なるフラグ名です。1. ANSI は非常に多くのことを標準化しているため、2. 古い標準は定期的に更新されて意味のある変更が加えられているため、単に「ANSI」と呼ぶのは避けた方がよいでしょう。3. 私が知っているどのコンピューター言語にも特に関与していません。むしろ、C++、ISO の場合、何らかの国際組織のメンバーとして参加します。

必要な標準化された言語の方言をコンパイラに伝えるときは、その標準化の年を指定するか、最初の (最も古い) 標準が必要であるという唯一の前提を指定します。最初の標準化は、年を指定しなくても曖昧にならない唯一の時点です。

ドキュメントによると、あいまいさといえば、-ansiGCC の呼び出しに依存する意味を持つ唯一の言語フラグです。gcc -ansiは C89 をg++ -ansi意味し、C++03 を意味します。個人的には、賢さよりもあいまいさが少ない方が好きです。

于 2013-07-05T03:56:57.450 に答える