14得票3回答
使用C语言qsort函数遇到问题

#include <stdio.h> #include <stdlib.h> float values[] = { 4, 1, 10, 9, 2, 5, -1, -9, -2,10000,-0.05,-3,-1.1 }; int compare (const voi...

14得票2回答
C99的所有特性在C++中也都存在吗?

此页面列出了 53 个在 C99 中新增的功能(即它们存在于 C99 中但不存在于 C89 中)。这些功能是否也在 C++ 中?甚至是在 C++98 中? 如果不是,那么哪些功能在 C++ 中,哪些不在?

14得票5回答
无符号类型和更大的有符号类型之间的隐式转换行为不一致

考虑以下例子:#include <stdio.h> int main(void) { unsigned char a = 15; /* one byte */ unsigned short b = 15; /* two bytes */ unsigned...

14得票1回答
C89标准中的哪个章节允许"implicit int"规则?

使用 gcc 时,代码应为:register a = 3; static b = 3; 使用-std=c89 -pedantic-errors 标记是允许的,尽管会有一个警告。 但是在使用-std=c99 -pedantic-errors标记时会收到错误信息。 我想知道C89标准中的哪个部...

14得票2回答
我应该使用"-ansi"还是明确的"-std=..."作为编译器标志?

我阅读到 ANSI C 并不完全等同于 ISO C,编译器对“-ansi”的解释也可能有所不同。(gcc 将其映射为 C90,clang 将其映射为 C89)目前,我倾向于使用“-std=…”而非“-ansi”,因为这样可以明确地显示使用的标准。但由于我特别关注在 Linux、Windows ...

14得票5回答
我应该将参数存储类说明符放在函数定义中还是在声明和定义中都放置?

我正在将一些旧的K&R代码移植到ANSI C,所以我正在编写缺失的函数原型声明。很多函数定义具有寄存器存储类参数,但是我不确定在函数原型中是否可以省略寄存器存储类说明符? 无论是带有还是没有寄存器存储类特定声明,代码都可以正确编译(我尝试了GCC、VC++和Watcom C)。我在I...

13得票3回答
超出翻译限制是未定义行为吗?有没有检查工具可以发现它?

原问题: 我正在查找C90标准,以了解在编写高度可移植代码时需要注意的事项,同时对编译器供应商的善意持有低信任度,并假设如果我做错了事情,我的软件可能会有时候导致某些人死亡。可以说我有点偏执。 目前,我正在考虑“翻译限制”(5.2.4.1 ANSI / ISO 9899:1990)。正如标...

13得票1回答
Clang在C89模式下无法对非常量数组初始化器抛出错误

这是Clang的一个bug吗?以下代码:#include <stdio.h> int main(void) { int foo = 42; int bar[1] = { foo }; printf("%d\n", bar[0]); return 0...

13得票1回答
符合要求的旧“结构体hack”的变体(?)

我相信我已经找到了一种类似于在可移植的C89中广为人知的“struct hack”的方法。 我很好奇这是否真正符合C89的规范。 主要思想是:我分配足够大的内存来容纳初始结构和数组的元素。确切的大小是(K + N) * sizeof(array_base_type),其中K被选择为K * s...

13得票3回答
如何在gcc中强制执行C89风格的变量声明?

我在一个主要使用C语言,少量使用C++语言编写的代码基础上工作,大部分是使用gcc编译器构建,但偶尔需要使用MSVC编译器。Microsoft的C编译器仍然基本上是C89标准,并带有一些小扩展,它仍然不支持混合代码和变量定义,类似于C++/C99。因此,我需要找到一种方法,在开发人员使用gcc...