15得票7回答
使用Turbo C有什么问题?

我经常发现一些人(大多来自印度)使用Turbo C。 我无法找到任何理由去使用如此过时的编译器... 但是我不知道在尝试告诉他们使用现代编译器(如gcc、msvc等)时应该给出什么样的理由。 我经常发现一些人,尤其是来自印度的用户,使用 Turbo C 编译器。然而,我无法找到任何使用这种...

17得票3回答
将int类型转换为size_t类型

在C99标准下,在32位和64位Linux平台上,将int转换/强制转换为size_t的正确方式是什么? 示例:int hash(void * key) { //... } int main (int argc, char * argv[]) { size_t size =...

34得票7回答
在CMake中强制使用C99(以使用'for'循环初始声明)

我一直在寻找一种便携的方法,可以强制CMake启用编译器的C99功能,以避免出现如下的gcc错误: error: ‘for’ loop initial declarations are only allowed in C99 mode for (int s = 1; s <= in_p...

44得票2回答
将一个多维变长数组传递到函数

有很多类似的问题,但我仍然找不到任何与C99 / C11中可变长度数组特性相关的答案。 如何在C99/C11中将多维可变长度数组传递给函数? 例如:void foo(int n, int arr[][]) // <-- error here, how to fix? { } voi...

20得票2回答
ANSI C或ISO C是否规定了-5%10应该是什么?

我记得 ANSI C 没有规定当模运算符的任一操作数为负数时应返回什么值(只是要保持一致)。后来是否有规定,还是一直都有规定而我记错了?

7得票2回答
对于uint32_t和其他stdint类型,有没有类似atoi或strtoul的等效函数?

我正在寻找将字符串转换为 stdint.h 整数的标准函数,例如: int i = atoi("123"); unsigned long ul = strtoul("123", NULL, 10); uint32_t n = mysteryfunction("123"); // <--...

8得票2回答
n1570.pdf中的5.1.2.3节第4段对空操作意味着什么?

我已经多次得到建议,即不能优化访问volatile对象,但是我认为在C89、C99和C11标准中存在以下这段话,它似乎提供了不同的建议: ……实际的实现不需要计算表达式的一部分,如果它可以推断出其值未被使用且没有产生任何必需的副作用(包括由调用函数或访问volatile对象引起的任何副作用...

26得票3回答
不带"void"的int main()在ISO C中是否有效且可移植?

C标准规定了主机实现中main的两种定义形式:int main(void) { /* ... */ } 和int main(int argc, char *argv[]) { /* ... */ } 它可以用与上述方式"等价"的方式来定义(例如,您可以更改参数名称,将int替换为定义为int的...

25得票2回答
如何使用GCC编译适用于独立环境的代码?

我正在处理的代码应该可以在托管和独立环境下构建,对于后者,需要为某些stdlib函数提供私有实现。 只使用普通的工作站/构建服务器上的GCC,我能否可靠地测试这一点?使用GCC编译自由环境 - "-ffreestanding"选项看起来很有前途,但似乎它只禁用了内置函数并正确设置了STDC...

8得票3回答
字符数组元素作为空字符串初始化的价值

假设以下初始化: 代码示例: char mystr[4] = ""; C99标准是否保证将字符数组初始化为空字符串会将字符数组中的所有元素都初始化为null字节?例如,标准是否保证mystr [2] =='\ 0'? 那这些初始化呢: char myfoo[4] = { '\0' ...