c11

    1热度

    1回答

    我最近浏览过一些描述采用C标准的页面,并且由于C99(它是15年前创建的!)尚未得到完全支持,我感到害怕。大多数编译器(如果不是全部的话)不支持完整的C99,我们已经有了C11。这是否意味着这些标准已经失效或者被忽略了?还是不值得再投资C?

    1热度

    2回答

    目前我有一个宏来检查一个值是一种类型。 #define CHECK_TYPE_INLINE(val, type) \ ((void)(((type)0) != (0 ? (val) : ((type)0)))) 这对于能够在某些情况下键入检查宏参数非常有用。 但是如果我要检查多种类型呢?例如,检查它是否是struct Foo *或struct Bar *。 例, static inl

    0热度

    1回答

    我正在尝试编写C中的应用程序,该应用程序使用C11规范中定义的thread.h使用线程。 我检查here和here和两个资源说,错误状态是不明或.....。 请给我一个有这个信息的来源。

    3热度

    2回答

    多态结构在C中很常见,但通常涉及显式的强制转换,它允许意外抛出不兼容的结构。 struct ID { char name[32]; }; struct IntID { struct ID id_base; int value; } struct FloatID { struct ID id_base; float value; }

    6热度

    3回答

    根据ISO/IEC 9899:1999 6.7.5§2, 每个声明符声明一个标识符,并且断言,当同一 形式的操作数为显示的说明符在表达式中,它指定具有 作用域,存储持续时间和由声明说明符指示的类型的函数或对象。 我不知道为什么表达式突然出现在声明符语义中。你能给我一些能帮助我理解意义的例子吗?

    6热度

    3回答

    我在写一些类似于atoi()或strtoll()的字符串转换函数。我想包括我的函数的一个版本,它可以接受char16_t *或char32_t *,而不仅仅是char *或wchar_t *。 我的函数可以正常工作,但是当我写它时,我意识到我不明白char16_t或char32_t是什么。我知道标准只要求它们是一个至少16或32位的整数类型,但其含义是它们是UTF-16或UTF-32。我也知道该标

    1热度

    1回答

    因为在C中没有静态初始化,我想懒洋洋地初始化一个全局的mtx_t(请保持你的反应速度)。对我来说使用布尔标志并不是什么问题,但我宁愿只检查mtx_t变量。 C11的mtx_t有一个幸运的'无效状态'我可以检查变量吗?我在草案标准中找不到任何东西。

    1热度

    2回答

    我注意到,C11不再允许您在循环结构内声明的迭代变量,例如,以下是无效的: for (int i = 0; i < 10; ++i) 但是,这是OK: int i; for (i = 0; i < 10; ++i) 鉴于C99之前甚至没有可能除了在功能(块?Does C11 allow variable declarations at any place in a function?)的

    -1热度

    1回答

    当我阅读关于calloc reference in cppreference中calloc的引用时,发现了以下我没有得到的提示。 释放calloc是线程安全的:它的行为就好像只有通过其参数存取存储器位置可见,并没有任何静态存储。 以前调用自由或realloc的即解除分配的存储器的区域同步-与到释放calloc一个呼叫分配相同的或相同的存储器区域的一部分。此同步发生在之后通过释放函数和任何通过cal

    7热度

    1回答

    我想在源文件中检测使用的编译器是否支持static_assert。