我正在编写一些库代码,可以选择使用某个C ++ 11特性(thread_local
对象)。但是,我found a bug仅在MINGW-W64的g++
版本中使用POSIX线程模型(Win32可以正常工作)。
那么,如何使用预处理器检测当前编译器是否为带有POSIX线程模型的g++
?
g++ -v
会产生... Thread model: win32
或... Thread model: posix
,具体取决于差异,但我需要一种方法来有条件地编译代码(以解决错误),但不涉及调用额外的g++
实例。
答案 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
实例/参考文献: