Tag: c99

是否允许编译器向标准头添加函数?

是否允许C编译器向标准头添加函数并仍然符合C标准? 我在某处读到了这个,但除了附件J.5外,我在标准中找不到任何参考: 包含可能导致严格符合程序无效的任何扩展会导致实现不一致。 此类扩展的示例包括新关键字, 标准标头中声明的额外库函数 ,或者名称不以下划线开头的预定义宏。 但是,附件J是提供信息的而不是规范性的…所以它没有帮助。 所以我想知道一个符合标准的编译器是否可以在标准头文件中添加额外的function? 例如,假设它将非标准itoa添加到stdlib.h中。

ftell在2GB以上的位置

在32位系统上,如果以二进制模式打开的文件的当前位置指示符超过2GB点, ftell返回什么? 在C99标准中,这是未定义的行为,因为ftell必须返回一个long int (最大值为2**31-1 )?

使用turbo C有什么问题?

我总是发现有些人(大多数来自印度)正在使用turbo C.我找不到任何理由使用这种过时的编译器…但我不知道在尝试告诉他们使用现代编译器时给出的理由是什么( GCC,MSVC,…)。

声明一个负长度数组

当你创建一个负长度数组时,C会发生什么? 例如: int n = -35; int testArray[n]; for(int i = 0; i < 10; i++) testArray[i]=i+1; 此代码将编译(并且在启用-Wall时不会显示任何警告),并且您似乎可以毫无问题地分配给testArray[0] 。 分配过去会给出段错误或非法指令错误,并从数组中读取任何内容,说“中止陷阱”(我不熟悉那个)。 我意识到这在某种程度上是学术性的,并且(希望)永远不会出现在现实生活中,但C标准是否有任何特定的方式来处理这样的数组,或者它是否因编译器而异?

与malloc / free相比,使用C99 VLA是个好主意吗?

使用C99 VLA是个好主意吗? 与malloc / free相比,何时使用VLA是否合适? (因为VLA可能会爆炸堆叠?)

的好介绍

我想向那些使用混合32/64位构建的printf人推荐使用 。 我尝试了谷歌的介绍或教程页面,其中包含一些示例和使用指南,但我找不到一个。 有人可以推荐的介绍或教程吗?

是否有GCC关键字允许结构重新排序?

我知道为什么GCC默认不重新排序结构的成员,但我很少编写依赖于结构顺序的代码,所以有什么方法可以标记我的结构自动重新排序?

比较两个相同长度的int数组的最佳方法是什么?

将int数组b和c与a进行比较的最佳方法是什么? int a[] = {0,1,0,0,1}; int b[] = {0,1,0,0,1}; int c[] = {1,1,0,0,1}; b和c只是示例,假设它们可以是0和1的任意组合。 我试图检测与a相同的数组。 我用谷歌搜索了一段时间,但没有找到满意的答案。 这是我意识到的初学者问题,谢谢你的耐心等待。

编译器支持GNU语句表达式

哪些现代编译器支持Gnu语句表达式(C和C ++语言)。 我应该使用哪个版本的语句表达式? 语句表达式就像({ code; code; retval }) : int b=56; int c= ({int a; a=sin(b); a}) 我已经知道一些这样的编译器: GCC> = 3 Clang / LLVM> =? 英特尔C ++编译器> = 6.0(Linux版本, 检查第4页 ;位受限 ) Sun Studio> = 12( 新语言扩展 ) IBM XL for z / OS( 标记为IBM扩展 ) Open64(因为它使用了osprey-gcc前端) 这个编译器似乎不支持这个(我不确定): MS Visual C ++ PS。 这里列出了一些C / […]

struct bitfield max size(C99,C ++)

位结构字段的最大位宽是多少? struct i { long long i:127;} 我可以在struct中定义一个位域,位域大小可以达到128位,或者是256位,还是更大? 有一些超宽的矢量类型,如sse2(128位),avx1 / avx2(256位),avx-512(下一个Xeon Phis为512位)寄存器; 以及gcc中的__int128等扩展名。