簡體   English   中英

警告:“auto”類型說明符是 C++11 擴展

[英]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.

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