我在开放标准的网站上search,特别是C工作组的主页,但只search了关于C11的信息。 他们似乎有定期的会议,讨论不同的function和扩展,但他们从来没有提到未来的C标准或路线图。 很难判断他们是在制定一个新的标准还是仅仅是对现行标准的技术勘误 。
C11支持匿名结构,如下所示: struct Foo { struct { size_t x, y; }; }; struct Foo f; fx = 17; fy = 42; 基本上,这样的struct的成员被视为如果它们是封闭的struct或union成员(recursion,如果封闭的结构本身是匿名的)。 C ++ 11的基本原理是不包括匿名结构? 它们通常是非常有用的(大多数在工会内部,为了消除struct的标识符的键入)。 但是,对于规范(以及许多编译器已经实现的规范)来说,它们似乎是一个明显的补充,它们肯定已经被讨论过了,至less要保持与C11标准的兼容性。 那么他们为什么不添加?
我已经知道C(C89和C99),我想把我的知识更新到最新的标准(C11)。 这些时候,似乎很难find一本关于C语言的好书和更新书。 我已经在互联网上search了所有的东西,但是这些信息很稀less,技术性太强,或者只是对标准论文的引用。 所以,我想知道是否有新的C11function(我不一定需要一本涵盖我知道的function的完整书籍)的好的和更新的教程(不一定是免费的)。 我对新的线程支持和新的_Generic选项/macros特别感兴趣,但是最多的是覆盖,更好。 在实践中,如果可能的话,我正在寻找C11的一站式解决scheme。 谢谢。
关于C11和C11线程有很多问题,但是我没有在任何地方看到明确的答案: 任何 C库都实现了GNU / Linux-like上可用的C11线程接口吗? 例如,从靠近p 的C11标准提供“可选” <threads.h>和线程支持库(如thrd_create() 。 376。 理想情况下,我希望find一个通用/通用/多种体系结构(例如,GNU / Linux,x86_64或便携式)的常见开源或免费库。 一些更有帮助和相关的SO链接: 这一个和这一个 glibc ; 这是谈论标准的一个; 这一个关于clang ; 这个关于C11的一般和这个关于Windows和其他平台的一个; 更多的关于C ++ 11线程,但我只对C11感兴趣。 图书馆的一些非启动选项: glibc库不 ; 自2012年以来有一个开放的错误 ; 有GSoC的build议,但似乎不被接受 ; LLVM / Clang项目没有C库; musl图书馆没有 ; – 现在呢! 请参阅下面的编辑并回答 。 Newlib库支持线程( docs ),但不使用pthread和C11线程; uClibc没有; 这个比较图,这是可疑的(例如,我看不到在C11线程本地存储支持musl来源的证据); 一些关于BSD的post, Pelles ,似乎是封闭的,只有Windows。 我对POSIX线程(很多很好的select),Windows,IDE,C ++ 11 都不感兴趣(我知道GNU libstdc++和LLVM / Clang […]
新的C11标准提供了对multithreading的支持。 我的问题有点多样化,但绝对是可以回答的。 我看了一下C11 n1570草案。 它说: 支持multithreading执行,包括改进的内存sorting模型,primefaces对象和线程本地存储( <stdatomic.h>和<threads.h> ) 什么是改进的内存sorting模型 ? c99标准有哪些变化? 如果有人深入研究并试图解释所涉及的语义,我将不胜感激。 据我所知,C11提供了对以下方面的支持: 线程创build和pipe理 互斥 有条件的variables 线程特定存储& primefaces对象 我希望我没有错过任何东西? 从现在开始,标准库自身提供(将提供)multithreading所需的所有function,将来就不需要POSIX和这样的库(用于multithreading支持)。 最后,什么编译器提供对上述function的支持? 是否有任何时间表提及这些将被支持? 我记得C ++ 11有一个编译器支持和function的链接,也许是这样的?
我读了关于noreturn属性的这个问题,它用于不返回给调用者的函数。 然后我用C做了一个程序 #include <stdio.h> #include <stdnoreturn.h> noreturn void func() { printf("noreturn func\n"); } int main() { func(); } 并使用此代码生成组装: .LC0: .string "func" func: pushq %rbp movq %rsp, %rbp movl $.LC0, %edi call puts nop popq %rbp ret // ==> Here function return value. main: pushq %rbp movq %rsp, %rbp movl $0, %eax call func 为什么函数func()在提供noreturn属性后返回?
使用%p转换说明符打印空指针是未定义的行为吗? #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } 这个问题适用于C标准,而不适用于C实现。
我有一个关于sizeof运算符与三元运算符的一小段代码: #include <stdio.h> #include <stdbool.h> int main() { bool a = true; printf("%zu\n", sizeof(bool)); // Ok printf("%zu\n", sizeof(a)); // Ok printf("%zu\n", sizeof(a ? true : false)); // Why 4? return 0; } 输出( GCC ): 1 1 4 // Why 4? 但在这儿, printf("%zu\n", sizeof(a ? true : false)); // Why 4? 三元运算符返回booleantypes,size的booltypes是C中的1个字节。 那么为什么sizeof(a ? true […]
代码: int main(void) { auto a=1; return 0; } 当文件具有.c扩展名时,由MS Visual Studio 2012编译器编译时没有错误。 我一直认为,当你使用.c扩展名时,编译应该按照C语法,而不是C ++。 此外,据我所知,没有types的auto 只能在C ++ 11以后的C ++中使用,这意味着types是从初始化器中推导出来的。 这是否意味着我的编译器不是坚持C,还是C语言中的代码实际上是正确的?
除此之外,C11增加了“匿名结构和联盟”。 我捅了一下,却找不到明确的解释,什么时候匿名结构和联合会是有用的。 我问,因为我不完全明白他们是什么。 我知道他们是结构或工会之后没有名字,但是我一直(不得不把?)视为一个错误,所以我只能设想一个命名结构的用法。