21得票3回答
C语言中使用gcc实现类型安全的可变参数。

很多时候我希望一个函数可以接收可变数量的参数,并以NULL终止,例如:#define push(stack_t stack, ...) _push(__VARARG__, NULL); func _push(stack_t stack, char *s, ...) { va_list ...

21得票6回答
K&R练习1.16 - 行长度的限制

我正在学习K&R的《C程序设计语言》这本书中的C编程。我正在做书中指定的练习。我现在在第1.16题,但是我不理解它。 练习1.16: 修改最长行程序的主函数,使其正确地打印任意长度的输入行,并尽可能多地打印文本。 我的问题: "…尽可能多地打印文本…" - 字符串长度有什...

20得票4回答
509个字符限制的原因解释

我见过许多 ANSI C 编译器必须支持的最低要求,例如函数最多支持 31 个参数,大多数数字似乎都有一定的道理。 然而,我无法理解至少需要支持源代码行中的 509 个字符的原因。511 或者 512 更合理,但是 509 似乎有点武断。 这个数字的原因是什么?

20得票8回答
学生学习哪个版本的C语言更合适 - C89/90还是C99?

我打算在下个月开始学习系统编程之前学习C语言基础和语法。在阅读一些资料时,我了解到C89/99标准。根据维基百科的说法, C99引入了一些新特性,包括内联函数、若干新的数据类型(包括long long int和一个表示复数的复数类型)、可变长度数组、支持可变参数宏(可变元数的宏)以及支...

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

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

20得票4回答
我应该使用ANSI C(C89)吗?

现在是2012年,我正在使用C语言编写一些代码。我应该继续使用C89吗?是否还有不支持C99的编译器存在呢? 我不介意使用/* */而不是//。 我对于C89禁止在代码中混合声明并不确定。我倾向于认为将所有声明放在一个地方更易读,如果不是这样,那么函数就太长了。 可变长度数组看起来很有用...

19得票1回答
为什么一些C标准头文件以'std'开头,而其他的不是呢?

例如,在新的C11标准中,添加了stdalign.h和threads.h。为什么不使用stdthreads.h或align.h?这是为了避免与现有库和系统头文件发生冲突吗?

19得票2回答
C89中有效的程序,在C99中无效

在 C99 中引入或删除的特性/语义是否会使一个在 C89 中写的良好定义程序变得: 无效(即根据 C99 标准无法编译) 编译,但具有不同的语义。 我目前的研究结果,关于明显无效的程序: 隐式 int(C89 §3.5.2) 隐式函数声明(C89 §3.3.2.2) 不从期望返回...

18得票6回答
提前声明文件指针 FILE *

如何在C语言中进行FILE *的前向声明?通常我会使用struct MyType;来实现,但自然地这似乎不可能。 如果C标准或编译器之间以及C++之间存在行为差异,这也是有趣的。 更新0 放置我的需求不谈:我想要知道如何前向声明非结构体/"typedef'd 结构体"类型,以便我可以声明...

18得票4回答
当使用"-std=c99"选项时,为什么gcc找不到random()接口?

我在源代码顶部使用"#include <stdlib.h>"。 编译示例: /usr/bin/colorgcc -std=c99 -fgnu89-inline -g -Wall -I/usr/include -I./ -I../ -I../../ -I../../../ -I...