clang c11 threads.h未找到

时间:2013-04-26 19:50:17

标签: c xcode clang c11 threads.h

我正在尝试在xcode中设置一个c11线程示例...但它似乎没有threads.h标头,虽然它没有抱怨这里描述的宏:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

  

__ STDC_NO_THREADS__整数常量1,用于表示实现不支持< threads.h>报头中。

showing dialect showing error

4 个答案:

答案 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;
}