因爲每個編譯器都有自己的線程本地存儲版本,所以我最終爲它創建了一個宏。現在唯一的問題是GCC(與並行線程關閉),這給了我:因爲並行線程實際上在這種情況下關閉「不支持此目標線程本地存儲」「此目標不支持線程本地存儲」,適合#ifdef?
不夠公平
。問題是,是否有一種使用一些宏來檢測這種情況的通用方法,例如, #ifdef __GCC_XXX_NO_THREADS_XXX?
編輯:請參閱下面的接受答案。另外,這裏是我的懶惰的解決方案:
$ touch test.c
$ gcc -E -dM test.c > out.1
$ gcc -pthread -E -dM test.c > out.2
$ diff out.*
28a29
> #define _REENTRANT 1
這是在Mac OS X我不知道這是否是便攜式的,或者什麼...
謝謝你提醒我__attribute __(弱)。是的,顯然你是對的,我可以使用宏。我的問題更多的是懶惰的:),但也因爲我很好奇答案。 – Krumelur 2010-11-01 18:44:38