簡體   English   中英

為什么 -ansi 和 -std=c++11 在 g++ 中發生沖突?

[英]Why do -ansi and -std=c++11 conflict in g++?

為什么 -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

這讓我很困惑。 謝謝!

實時調頻

-ansi
在 C 模式下,這相當於-std=c89 在 C++ 模式下,它相當於-std=c++98

該標志是在標准有多個版本之前添加的,該標志仍​​然具有相同的含義。

你為什么要同時使用兩者? 如果你想要-std=c++11然后使用它,不要添加另一個表示其他矛盾的標志。

它們只是標志名稱。 最好避免將任何東西稱為“ANSI”,因為 1. 它們標准化了很多東西,2. 舊標准定期更新並進行有意義的更改,3. 他們沒有特別參與我所知道的任何計算機語言,而是作為一些國際組織的成員參與,在 C++、ISO 的情況下。

當告訴編譯器您想要哪種標准化語言方言時,請指定其標准化的年份,或者它可以做出的唯一假設是您想要第一個(最舊的)標准。 最初的標准化是唯一一個沒有指定年份不會導致歧義的時間點。

說到歧義,根據文檔-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標志,而我們其他人則使用正確的年份標記標准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM