[英]warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
[英]warning: 'auto' type specifier is a C++11 extension
我有一個非常簡單的 C++ 代碼語句auto a = 12;
.
當我使用-std=c++98
選項在 Linux 中使用 g++ 編譯它時,我收到了預期的錯誤
error: 'a' does not name a type
但是當我在 MacOS 中使用相同的選項編譯相同的代碼時,我只會收到一個警告,但代碼編譯得很好。
warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
但是-std=c++98
的全部意義不在於按照 C++ 98 標准編譯代碼嗎? 所以警告告訴即使 auto 是 C++11 擴展我要為你編譯它?
是否有任何選項可以強制使用c++98
(或其他標准)?
g++ --version
打印Apple clang version 12.0.0 (clang-1200.0.32.29)
順便說一句,這是另一個奇怪的事情。 所以實際上是 clang。
這就像問firefox --version
並獲得chrome 87.0.4280.163
在 MacOS 上,您使用的是 clang,而不是 gcc。 (如果我沒記錯的話,MacOS 分別提供了“gcc”和“g++”作為“clang”和“clang++”的符號鏈接,因此假設 gcc 的腳本不會中斷。)
這兩個編譯器只是以不同的方式處理這種情況。
是的,符合 1998 ISO C 標准的編譯器,因為 gcc 和 clang 嘗試使用-std=c++98
來診斷該行。
就標准而言,非致命警告是有效的診斷。 該標准不要求拒絕無效程序(除非它包含#error
指令)。
如果您想嚴格執行 C++98 規則並拒絕違反它們的代碼,請使用-std=c++98 -pedantic-errors
(使用 gcc 或 clang)。
您可能正在尋找-pedantic
或-pedantic-errors
,引用man g++ :
-迂腐的
發出嚴格的 ISO C 和 ISO C ++ 要求的所有警告; 拒絕所有使用禁止擴展的程序,以及其他一些不遵循 ISO C 和 ISO C ++ 的程序。 對於 ISO C,遵循由使用的任何 -std 選項指定的 ISO C 標准版本。
注意:這並不是檢查嚴格標准一致性的功能(請參閱手冊頁中描述的 rest)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.