爲什麼-ansi和-std = C++ 11不能一起工作? (根據其他答案,ANSI恢復爲C++ 98) 我正在使用g ++ - 4.8。g ++爲什麼-ansi和-std = C++ 11衝突?
這裏是ANSI批准的C++ 11:
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2012
這讓我困擾。 謝謝!
爲什麼-ansi和-std = C++ 11不能一起工作? (根據其他答案,ANSI恢復爲C++ 98) 我正在使用g ++ - 4.8。g ++爲什麼-ansi和-std = C++ 11衝突?
這裏是ANSI批准的C++ 11:
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2012
這讓我困擾。 謝謝!
他們只是旗幟的名字。最好避免調用任何「ANSI」,因爲1.它們標準化了很多東西,2.舊標準定期更新並進行有意義的更改,3.它們沒有涉及我意識到的任何計算機語言,而是作爲一些國際組織的成員參與,如C++,ISO。
當告訴編譯器你想要什麼標準化的語言方言時,指定它的標準化年份,或者它唯一的假設就是你想要第一個(最老的)標準。最初的標準化是唯一的一個時間點,指定年份時不會導致歧義。
說到歧義,根據documentation,-ansi
是唯一的語言標誌,其含義取決於調用GCC。 gcc -ansi
表示C89,而g++ -ansi
表示C++ 03。就我個人而言,我更喜歡比較聰明的模糊性。
是的。這與C++中的C++一樣:ANSI已經採用(幾乎是自動)ISO C標準出現的每個版本,包括C11:http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+9899-2012。每個新標準都「取代並取代」較早的標準,正如你注意到的,官方的ANSI標準是C11和C++ 11,而早期版本不再是有效的法則。 ANSI標準是當前的ISO標準。
所以,如果你想讀--ansi
標誌作爲表明ANSI目前採用的標準,那將是完全沒有必要的。
取而代之,C和C++上下文中的術語「ANSI」用於指在添加後面的功能之前,該語言的第一個標準化版本。這只是一種習俗,並且和所有習俗一樣,不必具有字面意義。這很方便,因爲有些人(通常是偶然的C或C++用戶)對標準組織的工作不太瞭解,並且認爲ANSI的最後C標準確實是1989年的標準。那些人將依靠--ansi
標誌,而我們其他人使用正確的年份標籤標準。
由於新標準的批准並未導致gcc標誌的含義發生變化。 –
但是標誌明確地以標準命名,不是嗎? –
是的,至少是原來的。改變現有標誌的含義雖然很棘手 - 可能(可能會)打破了大量現有的makefile等等。 –