因为每个编译器都有自己的线程本地存储版本,所以我最终为它创建了一个宏。现在唯一的问题是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