簡體   English   中英

用於C ++ 11支持的錯誤編譯器版本的存儲庫

[英]Repository of buggy compiler versions for C++11 support

我有一個C ++軟件,可以使用不同的操作系統,平台和編譯器進行編譯。 現在有時編譯器會出現錯誤,例如這個錯誤,這意味着gcc版本4.6.4之前和4.7.3之前是不行的。 現在我可以包含一個顯示錯誤的單元測試(也許這個問題將揭示確實這就是我應該做的事情),但這是一項繁瑣的工作:編譯器錯誤有時難以重現並且將其轉換為單元測試可能不會很容易......當你手頭有平台和編譯器時就是這樣。

我正在尋找的是一個存儲庫,告訴我哪些版本的g ++,clang ++和msvc ++遭受了支持C ++ 11的致命錯誤(我不是在談論缺少的功能,當功能不存在時我會解決它們) 。 在構建系統中使用它們構建時,我會致命崩潰。 不錯的功能是,我甚至沒有被迫發現一個禁止編譯器的bug(所以我為自己節省了未來的麻煩)。

這樣的清單是否存在?

這可能不是您正在尋找的答案,但我相信處理這個問題的正確方法是使用白名單,而不是黑名單。 換句話說,有一個你知道可以工作的編譯器列表,如果客戶嘗試使用與你測試過的版本不同的版本進行構建,你會發出一條警告消息,作為構建腳本的一部分,說明如下:

不支持此編譯器,請參閱http://www.example.com/list_of_supported_compilers.html以獲取我們支持的編譯器列表。 如果您選擇繼續使用此編譯器,請隨意執行此操作,但如果您發現問題,請不要期望我們的技術支持提供全面支持。

我說這個的原因是:

  1. 您將無法證明除黑名單之外的每個版本都能正常工作。 但是,對於你所擁有的任何測試用例,你可以證明編譯器X版本abc-d有效[這並不意味着這個編譯器沒有錯誤 - 只是你沒有在你的測試中遇到任何這些錯誤!]
  2. 即使編譯器“已知良好”(通過任何定義的標准),您的特定代碼也可能會觸發影響代碼的錯誤。

任何足夠大的軟件(或硬件)產品都會有錯誤。 您只能通過測試來證明您的軟件是有效的。 依賴於外部“版本中存在已知的錯誤,例如編譯器X”將無法幫助您避免影響代碼的錯誤。 話雖如此,大多數編譯器都經過了相當好的測試,因此您(通常)需要做一些相當不尋常/復雜的事情來使編譯器失敗。

調查Boost.Config ,特別是頭文件<boost/config.hpp>

這包括一大堆宏,用於各種編譯器(以及它們的不同版本),它們指示哪些C ++功能已啟用,已損壞等。它還包括一個全面的測試套件,可用於測試任何新編譯器的缺失功能等等

暫無
暫無

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

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