簡體   English   中英

如何使g ++迫使我遵守C ++標准

[英]How to make g++ force me to adhere to C++ standard

我正在嘗試學習以前沒有使用C或C的經驗的C ++,而且我看到一些培訓材料有時試圖教我C編碼而不是C ++。

由於我沒有足夠的知識來辨別這些書是否試圖教給我正確的C ++,我認為我可以在g ++編譯器上設置一些參數來解決這個問題。 所以我的問題是:

如何在Windows中設置g ++編譯器,以便在我編寫的不是純C ++標准的情況下他也不會編譯?

提前謝謝了

沒有哪個編譯器是完美的(大多數情況下都不是100%按照法律的規定實現任何特定的C ++標准),但是您可以將警告調高,然后使它們出錯:

g++ source.cpp -Wall -Wextra -pedantic -Werror

這將導致大多數非標准行為被徹底拒絕; 但是,它也會將一些警告故事變成可能不是您想要的錯誤。

使用最佳判斷來決定是否要使用-Werror 就個人而言,我建議您這樣做,除非您被強制不要包括編寫錯誤的第三方庫標頭的要求。

不過,如果遇到特定的警告,您總是可以排除它們。 例如,通過附加-Wno-unused-variable

請查閱工具鏈的文檔以獲取可用的警告開關。

不會做的是在符合標准的C ++代碼中檢測C習慣用法。 那是不可能的。
為此,您會有更好的書籍,代碼審查會議和您的良心。 :)

如何在Windows中設置g ++編譯器,以便在我編寫的不是純C ++標准的情況下他也不會編譯?

你不能。 我同意@Lightness在他的回答中所說的大部分內容。 這不是編譯器的工作要提醒你的一切,你可能會被調用未定義的行為(其中一些是在編譯時甚至檢測)的方式。

但是 ,我不同意他的回答,他將-Wall -Wextra -pedantic等同於“警告上升-Wall -Wextra -pedantic高”。

在GCC手冊(v5.2)中引用了這些選項的實際含義,並強調以下內容:

-Wall

這樣就可以發出一些用戶認為可疑且易於避免的關於構造的所有警告

-Wextra

這將啟用-Wall未啟用的一些其他警告標志

-pedantic

發出嚴格的ISO C和ISO C ++要求的所有警告[...]

並非所有不是“純C ++”的構造實際上都需要標准警告。 即使是-Wall -Wextra -pedantic ,也有很多事情無法保護您免受-Wall -Wextra -pedantic ,還有很多很可能是編程錯誤但又沒有被標准涵蓋的事情(例如-Wsign-conversion-Wswitch-default-Wlogical-op-Woverloaded-virtual ...)

因此,這里的建議是,選擇編譯器手冊,並檢查所有可用的警告選項,並選擇您可以使用的最嚴格的設置。 定期重復該過程。

暫無
暫無

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

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