首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC是不合格的?

GCC是不合格的?
EN

Stack Overflow用户
提问于 2020-05-19 09:34:53
回答 1查看 437关注 0票数 2

我知道很少有编译器真正支持C11线程(这是可悲的,但无论如何)。C11标准要求不支持线程的实现定义__STDC_NO_THREADS__。然而,这个程序似乎出现了一个错误:

代码语言:javascript
复制
#include <stdio.h>
#ifndef __STDC_NO_THREADS__
    #include <threads.h> //error is here
#endif // __STDC_NO_THREADS__

int main(void)
{
    #ifdef __STDC_NO_THREADS__
        printf("There are no threads");
    #else
        printf("There are threads");
    #endif // __STDC_NO_THREADS__
}

//Error at line 3: fatal error: threads.h: No such file or directory

编译器版本是GCC 9.2.0 (Windows10 x64),带有__STDC_VERSION__ = 201710L (所以是C17)。如果您不能判断,问题是我的编译器没有定义__STDC_NO_THREADS__<threads.h>,这不符合C11。问题是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 10:19:08

预C11编译器和库不会定义__STDC_NO_THREADS__,也不会为线程提供支持的后C11编译器和库。因此,正确的检查需要如下所示:

代码语言:javascript
复制
#if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__)
  #include <threads.h>

否则,编译器/库的旧版本将无法工作。在您的示例中,您似乎是在Windows下使用明威,在这种情况下使用的是不兼容的Microsoft (它不符合C99及其他版本)。

使用libc后期版本的gcc的后期版本似乎与原始代码正确地工作。

请注意,除非您使用-std=c17 -pedantic-errors编译,否则gcc不会被视为符合规范的实现。我不认为这在这件案子中有什么关系。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61887795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档