如何使用预处理器检测GCC线程模型?

时间:2014-12-16 04:15:29

标签: g++ c-preprocessor posix

我正在编写一些库代码,可以选择使用某个C ++ 11特性(thread_local对象)。但是,我found a bug仅在MINGW-W64的g++版本中使用POSIX线程模型(Win32可以正常工作)。

那么,如何使用预处理器检测当前编译器是否为带有POSIX线程模型的g++

g++ -v会产生... Thread model: win32... Thread model: posix,具体取决于差异,但我需要一种方法来有条件地编译代码(以解决错误),但不涉及调用额外的g++实例。

1 个答案:

答案 0 :(得分:1)

检查是否定义了宏__WINPTHREADS_VERSION。如果是这样,你在MinGW上使用posix线程。

例如:

#if defined(_WIN32) && !defined(__WINPTHREADS_VERSION)
    Logic for MinGW win32 threads;
#else
    Logic for MinGW posix threads or Linux/UNIX;
#endif

实例/参考文献: