我正在尝试在xcode中设置一个c11线程示例...但它似乎没有threads.h标头,虽然它没有抱怨这里描述的宏:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
__ STDC_NO_THREADS__整数常量1,用于表示实现不支持< threads.h>报头中。
答案 0 :(得分:3)
看起来几乎没有什么能支持C11中的线程功能...也许我会尝试将它变成clang ......
答案 1 :(得分:1)
我的机器上的clang(ubuntu / linux上的v.3.2)没有定义功能测试宏。支持该功能将需要C库中的支持,这通常不是编译器附带的。所以基本上clang的答案与gcc没什么不同,它们通常建立在相同的C库上,即glibc,参见here for answer for gcc。
答案 2 :(得分:0)
它似乎没有
threads.h
标题,但没有抱怨
C11有2个关于__STDC_NO_THREADS__
7.26主题
定义宏__STDC_NO_THREADS__
的实现无需提供 这个标题也不支持它的任何设施。 C11N1570§7.26.12
__STDC_NO_THREADS__
整数常量1,用于表示 实现不支持<threads.h>
标头。 C11N1570§6.10.8.31
根据§7.26.12:
#ifdef __STDC_NO_THREADS__
#error "No threading support"
#else
#include <threads.h>
#endif
按§6.10.8.3:
#if defined(__STDC_NO_THREADS) && __STDC_NO_THREADS__ == 1
#error "No threading support"
#else
#include <threads.h>
#endif
// Certainly this can be simplified to
#if defined(__STDC_NO_THREADS) && __STDC_NO_THREADS__
或按What is the value of an undefined constant used in #if?至
#if __STDC_NO_THREADS__
这符合OP的代码,所以我希望能够使用兼容的C11编译器。
然而,看起来OP每solution有一个@Kevin。这可能是一个错误的解决方案,因为__STDC_NO_THREADS
看起来像一个拼写错误(缺少尾随__
)。
#if !defined(__STDC_NO_THREADS) || __STDC_NO_THREADS__
答案 3 :(得分:-15)
在C ++ 11中,您需要#include <thread>
,而不是threads.h
#include <iostream>
#include <thread>
void fun() { std::cout << "fun!" << std::endl; }
int main() {
std::thread t ( fun );
t.join ();
return 0;
}