Tag: c11

如何在Code :: Blocks中使用C11标准

就像标题所说我需要使用code::blocks来使用C11 ,我无法弄清楚如何做到这一点。 我去settings => compiler settings => Other options ,我添加了-std=c11并尝试使用-std=gnu11 ,两者似乎都不起作用。 我编译了gcc-5.2然后我更改了默认编译器(gcc-4.9)但仍然没有结果。 当我尝试编译以下程序时: #include int main(void){ int arr[] = {0,1,2,3,4}; for(int i=0;i<5;i++){ printf("%d ",arr[i]); } return 0; } 我得到以下内容: |6|error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode| 但如果我在终端(ubuntu 15.04,64BIT,gcc-5.2)中这样做: ./install/gcc-5.2.0/bin/gcc5.2 program.c -o program 似乎工作正常。 我的问题是,如何使code::blocks与c11 ?

什么是C11 cor 1:2012?

我刚刚注意到对C11标准进行了修正,称为ISO / IEC 9899:2011 / Cor 1:2012 。 此更新中发生了哪些变化?

_Atomic类型说明符和限定符之间的C11语法歧义

我正在尝试根据N1570编写C11的lex / yacc语法。 我的大部分语法都是从信息性语法摘要中逐字复制的,但是出现了一些yacc冲突。 我设法解决了除了一个之外的所有问题:当’_Atomic’用作类型说明符和用作类型限定符时,似乎存在一些歧义。 在说明符forms中,_Atomic紧跟着括号,所以我假设它与C的很少使用的语法有关,它允许声明符在括号中,从而允许括号立即跟随限定符。 但我的语法已经知道如何区分typedef名称和其他标识符,所以yacc应该知道差异,不应该吗? 我不能为我的生活想到一个实际上是模棱两可的案例。 我怀疑它有帮助,但这是我使用yacc的-v标志时获得的相关状态输出。 “ATOMIC”显然是我的“_Atomic”的令牌名称 state 23 152 atomic_type_specifier: ATOMIC . ‘(‘ type_name ‘)’ 156 type_qualifier: ATOMIC . ‘(‘ shift, and go to state 49 ‘(‘ [reduce using rule 156 (type_qualifier)] $default reduce using rule 156 (type_qualifier)

错误:使用未声明的标识符’errno_t’

这是我死的简单虚拟代码: #include int main(void) { errno_t e; return 0; } 这令人惊讶地引发了这个错误: main.c:5:5: error: use of undeclared identifier ‘errno_t’ errno_t x; ^ 我开始遵循这些跟踪 :当编译器看到包含时,它将首先查看/usr/include当然我找到了errno.h文件。 实际上它除了许可证注释外还有一行,它是: #include 现在,在errno.h /usr/include/sys中,我找到了以下行: #include #if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 #include #endif 在/usr/include/_types中的/usr/include/_types _errno_t.h我发现了这个: typedef int errno_t; 所以看起来,它就在那里,它是整数类型的别名,也是errno.h一部分 – 正如它应该的那样。 那为什么不包括在内呢? 为什么编译器会引发未声明的标识符错误? 提前致谢! 相关信息: Compiler: Apple LLVM version 5.1 (clang-503.0.40) (based […]

M_PI不适用于gcc –std = c11但是–std = gnu11?

我注意到c11上的M_PI不可用。 通过查看/usr/include/math.h我可以看到M_PI定义如果: #if !defined(__STRICT_ANSI__) || ((_XOPEN_SOURCE – 0) >= 500) … #define M_PI 3.1415… #endif 另外在math.h , glibc __STRICT_ANSI__被替换为__USE_MISC 。 我完全迷失了。 –std=c11和math.h定义的常量之间的故事是什么? 我应该在debian发行版中考虑哪个libc ? 顺便说一句, M_PI在c99和gnu11定义……

什么是C11中的gets()等价物?

来自cplusplus.com 最新版本的C标准(2011年)明确地将此function从其规范中删除 该函数在C ++中已弃用(截至2011年标准,遵循C99 + TC3)。 我只是想知道C11标准中gets()的替代方法是什么?

在C1X中初始化匿名结构或联合

我有以下问题:根据当前的C1X草案,匿名结构(或联合)如何正确初始化? 这是合法的: struct foo { int a; struct { int i; int j; }; int b; }; struct foo f = { 1, 2, 3, 4 }; struct foo g = { 1, { 2 }, 3 }; 在GCC中, gj == 0和gb == 3 ,而在tcc gj == 3和gb == 0 。 目前的草案说: “[…]结构和联合类型的对象的未命名成员不参与初始化。结构对象的未命名成员即使在初始化之后也具有不确定的值。” 这真的可以吗? 是不是 […]

C11中多参数C函数的generics

我理解单参数函数的C11generics,如下所示:(从这里 ) #define acos(X) _Generic((X), \ long double complex: cacosl, \ double complex: cacos, \ float complex: cacosf, \ long double: acosl, \ float: acosf, \ default: acos \ )(X) 但是,对于具有两个参数的函数来说似乎很痛苦,你需要将调用嵌套到_Generic ,这真的很难看; 摘自同一篇博客: #define pow(x, y) _Generic((x), \ long double complex: cpowl, \ double complex: _Generic((y), \ long double complex: cpowl, \ default: cpow), \ […]

支持C11的编译器

我想知道是否有任何编译器支持相当数量的新C11标准。 寻找像Generic Selection等的function。 有什么建议?

使用scanf_s读取字符

我只是乱搞C并遇到了这个小问题。 正如你从我的输出中看到的那样,我得到了’╠’这个角色。 #include “stdio.h” void main() { char c; printf(“Do you want to be X’s or O’s?\n”); scanf_s(“%c”, &c); printf(“You chose %c\n”, c); } 见程序输出