50得票4回答
如何在ANSI C中生成NaN、-Infinity和+Infinity?

我使用的是 ANSI C89(不是 C++),我想生成 NaN、-Infinity 和 +Infinity。 是否有任何标准方法(例如标准宏)? 或者是否有任何平台和编译器无关的方法来生成这些数字?float f = 0.0 / 0.0; // Is f ALWAYS in any plat...

48得票11回答
ANSI C和K&R C之间的主要区别是什么?

维基百科关于 ANSI C 的文章写道: ANSI C 标准化过程的一个目标是生成 K&R C 的超集(第一个发布的标准),吸收了许多随后引入的非官方功能。然而,标准委员会也包含了一些新特性,比如从 C++ 编程语言借鉴来的函数原型和更强大的预处理器。参数声明的语法也被改变以反...

48得票11回答
为什么在C99之前C语言没有布尔数据类型?

我知道你可以使用#define定义一些整数,但是为什么在C99之前C语言没有专门的布尔数据类型呢? 在编程和逻辑中这是如此常见,我不理解为什么缺少一种显式的类型和符号。

47得票6回答
为什么在C99之前,声明和代码混合被禁止?

我最近成为了一门主要教授C语言的大学课程的助教。由于广泛的编译器支持,该课程标准化了C90.对于以前有Java经验的C语言新手来说,其中一个非常令人困惑的概念是变量声明和代码不能在块(复合语句)内混合。 这个限制在C99中终于被取消了,但我想知道:它最初存在的原因是什么?它简化了变量作用域分...

44得票7回答
"int"和"int_fast16_t"有什么区别?

据我了解,C规范规定类型int应该是目标平台上至少包含16位的最高效类型。 那C99对于int_fast16_t的定义难道不也是这样吗? 也许他们之所以把它放在那里只是为了保持一致性,因为其他的int_fastXX_t也是必需的吗? 更新: 总结以下下面的讨论: 我的问题在很多方面都...

44得票7回答
如何查找我的当前编译器标准,例如是否为C90等。

我正在使用 Linux 计算机。有没有系统命令可以查找我正在使用的 C 编译器所遵循的标准?

35得票6回答
在 ANSI (C89/90) C 中,表示一个字节的类型是什么?

是否有符合标准的方法在 ANSI (C89/90) C 中表示字节?我知道通常情况下,char 恰好是一个字节,但我理解这并不保证一定成立。此外,在 C99 标准中有 stdint.h,但在 C99 之前使用了什么? 我对8位特定和“字节”(sizeof(x) == 1)都很感兴趣。

33得票5回答
在MS Visual C++中启用VLAs(可变长度数组)?

我应该如何在MS Visual C++中启用VLAs(变长数组,C99中定义的),或者根本不可能实现? 我知道C++标准基于C89,因此VLAs在C89标准中不可用,因此在C++中也不可用。但是MSVC ++也应该是一个C编译器,可以使用/TC编译器参数(编译为C代码(/TC))来切换行为。 ...

33得票3回答
如何求解大数之和?

我正在尝试计算1 + 1 * 2 + 1 * 2 * 3 + 1 * 2 * 3 * 4 + ... + 1 * 2 * ... * n,其中n是用户输入的。它适用于n值最多为12。我想计算n=13,n=14和n=15的总和。如何在C89中实现呢?据我所知,我只能在C99或C11中使用unsi...

30得票4回答
在C89标准中使用M_PI

我正在使用C语言,试图访问常量M_PI(3.14159...)。我已经导入了math.h头文件,但是M_PI常量仍然未定义。通过在StackOverflow上搜索,我发现需要在代码中添加#define _USE_MATH_DEFINES(请参见下面的示例代码)。这在正常编译时可以正常工作,但是...