Tag: c11

独立实现和托管实现之间是否存在有意义的区别?

我的问题主要涉及第四节第六段 。 这两种符合实施forms是托管和独立的。 符合要求的托管实施应接受任何严格符合的程序。 据我了解,这构成了典型的应用程序环境,包括文件系统,分配内存和线程…… 符合标准的独立实现应接受任何严格符合的程序,其中库子句(第7节)中指定的特性的使用仅限于标准头文件 , , , , , , , 和 。 ……这构成了典型的内核和/或嵌入式,最小环境, 没有标准文件系统,分配内存或线程(以及其他内容)。 符合条件的实现可能具有扩展(包括附加库函数),前提是它们不会改变任何严格符合程序的行为。 似乎这为托管实现提供了自由调用托管或独立实现的自由,当涉及文件系统,分配内存或线程(以及其他内容)时,这些可以属于扩展类别,因此它只能实现一个接口,每次都返回一个指示错误的值。 仅举几个: fopen , fgets和malloc可以返回NULL fprintf , fscanf , fputc和fgetc可以返回EOF thrd_create可以返回thrd_error (表示“请求无法兑现”) 这意味着区分第四节第六段给出的内容实际上毫无意义。 是否有任何要求保证托管和独立实施中这些function的某些实际function级别? 例如,是否要求上述函数实际上能够返回除相应故障值之外的其他函数?

找不到C11 GCC threads.h?

以下代码 #include 给我这个错误: fatal error: threads.h: No such file or directory 使用最新的GCC和Clang -std = c11。 GCC和Clang不支持C11线程吗? 或者是否有一个黑客(或安装的东西)来获得它? 我只是使用Ubuntu 14.04和Ubuntu repo中的gcc和clang包。

传入_Generic宏的不兼容的指针类型

以下代码生成2个警告,这些警告在问题标题中描述。 #include static void _print_f(float *f){printf(“float : %f\n”, *f);} static void _print_i(int *i) {printf(“int : %d\n”, *i);} #define print(num) _Generic((num), \ int* : _print_i(num), \ float* : _print_f(num)) int main(void) { print((&(int){10})); print((&(float){10.f})); return 0; } OUTPUT: int : 10 float : 10.000000 我知道,这个宏可以写成如下: #define print(num) _Generic((num), \ int* : _print_i, \ float* : _print_f)(num) […]

C编程语言的运算符优先级表

列出C语言中所有运算符的正确运算符优先级表是什么样的? 我在网上进行了大量搜索,发现了许多这样的优先级表。 唉,我还没有找到一个满足这些要求的人: 列出ISO 9899:2011中定义的C语言中的所有运算符,而不混合任何C ++运算符。 以完整且正确的优先级顺序列出操作员。