我想在我的項目中使用thread_local
關鍵字。但是,並非所有支持-std=c++11
的編譯器都支持thread_local
。我能否知道是否有辦法確定編譯時是否支持thread_local
?我試着用Google搜索,但沒有找到答案。確定編譯時是否支持thread_local關鍵字
回答
但是,並非所有支持
-std=c++11
的編譯器都支持thread_local
。
根據this reference他們需要符合C++ 11標準。
所以你的問題基本上歸結爲確定你的代碼的一部分是否編譯了-std=c++11
選項或不是,這已經很好answered here。
如果您看到特定的操作系統環境的差異/ C++編譯器實現,我建議你運行一個預編譯腳本,該探針特定的編譯器的能力,並且爲你生成一個config.h
頭。
包括這個頭可以被用於確定,如果特定功能可用,你可以把你的頭文件和源文件適當
#if defined(FEATURE)
// feature specific code
#else
// plain code
#endif
。
爲了支持我已經介紹了一種選擇,也有GNU automake tools,支持生成這樣的探測腳本。它可用於支持各種目標平臺。
你的回答表明你從來沒有在蘋果的小丑中編譯過鏗鏘的mac,他們已經盡力去銷燬它。 :/ –
@RichardHodges不,我其實沒有。但實際上它需要通過符合C++ 11的編譯器來實現。那麼你提到的那些有bug?這將需要額外的'#ifdef'來排除,除非這個問題得到解決。 –
@πάνταῥεῖ,至少有一個被廣泛使用的東西,它被認爲是C++ 11的一致性,但卻忽略了C++ 11的所有線程特殊部分。也就是說,mingw和他們提供的gcc版本。 – SergeyA
- 1. Android NDK編譯器是否支持內聯彙編? (即asm或__asm關鍵字?)
- 2. Delphi 7是否支持inline關鍵字?
- 3. ScyllaDB CQL是否支持`contains`關鍵字?
- 4. Node.js是否支持let關鍵字?
- 5. 爲什麼編譯器不支持C++ 11 thread_local存儲?
- 6. GNU Java編譯器是否支持JNA?
- 7. MacRuby是否支持靜態編譯?
- 8. 不支持關鍵字MultipleActiveResultSets
- 9. 不支持關鍵字:'dsn'
- 10. 「MultipleActiveResultsSets」關鍵字不支持
- 11. WebSQL是否支持主鍵?
- 12. 如何確定是否支持window.confirm()?
- 13. 確定Web存儲是否受支持
- 14. 在Android上,確定是否支持glBlendFuncSeparateOES
- 15. .net運行時編譯器是否支持C#3.0?
- 16. NHibernate HQL是否支持UNION ALL關鍵字?
- 17. 如何確定瀏覽器是否支持div支持tabindex?
- 18. 確定時區是否支持夏令時
- 19. 以編程方式確定系統是否支持待機
- 20. 支持Windows編譯
- 21. 是否正確使用「this」關鍵字?
- 22. ios編譯ffmpeg不支持ac3支持
- 23. 確定QFont是否支持某個UTF-8字符
- 24. 如何確定CultureInfo實例是否支持拉丁字符
- 25. iPad:如何確定UIView子類是否支持字體?
- 26. 谷歌翻譯是否支持CORS?
- 27. emacs自定義C++編譯支持
- 28. 關閉編譯器ES6讓關鍵字
- 29. F#編譯器是否支持與C#編譯器相同的foreach優化
- 30. 編譯時沒有OpenSSL支持錯誤
[This](http://stackoverflow.com/questions/5047971/how-do-i-check-for-c11-support)不會告訴你,如果'thread_local'被支持,但你可以告訴如果C++ 11正在使用。 – NathanOliver
通常的方法是使用thread_local,如果它不編譯,然後抓住任何宏來識別給定的編譯器,並使用ifdef-s來替換它的工作。 – marcinj
通常的技術(使用linux安裝包)是運行一個配置腳本,它嘗試編譯一個小代碼片段並檢查編譯器的退出狀態。然後生成一個配置頭文件,其中包含一些定義,告訴你可以在代碼中使用什麼,以及哪些不能使用。 –