问题标签 [c89]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ANSI C 和 K&R C 之间的主要区别是什么?
关于 ANSI C的维基百科文章说:
ANSI C 标准化过程的目标之一是生成 K&R C(第一个发布的标准)的超集,其中包含随后引入的许多非官方特性。然而,标准委员会还包括了一些新特性,例如函数原型(借用自 C++ 编程语言)和功能更强大的预处理器。参数声明的语法也进行了更改以反映 C++ 风格。
这让我觉得存在差异。但是,我没有看到K&R C和ANSI C的比较。有没有这样的文件?如果不是,主要区别是什么?
编辑:我相信 K&R 书的封面上写着“ANSI C”。至少我相信我家里的版本是这样的。所以也许不再有区别了?
c - C 中的变量声明位置
我一直认为在 C 中,所有变量都必须在函数的开头声明。我知道在 C99 中,规则与 C++ 中相同,但 C89/ANSI C 的变量声明放置规则是什么?
以下代码使用gcc -std=c89
and成功编译gcc -ansi
:
不应该在 C89/ANSI 模式下声明c
并s
导致错误吗?
c - C89、C90 或 C99 中的所有功能都需要原型吗?
为了真正符合标准,C 中的所有函数(除了 main)是否都必须有一个原型,即使它们只是在同一个翻译单元中定义后才使用?
c - 用于表示 ANSI (C89/90) C 中的字节的类型?
是否有标准投诉方法来表示 ANSI (C89/90) C 中的字节?我知道,大多数情况下,一个字符恰好是一个字节,但我的理解是,不能保证是这种情况。另外,C99 标准中有 stdint.h,但 C99 之前使用的是什么?
我对 8 位和一个“字节”(sizeof(x) == 1)都很好奇。
c - floor() 是否返回完全可表示的东西?
在 C89 中, floor() 返回一个双精度值。以下是否保证工作?
我担心的是 floor 的结果在 IEEE 754 中可能无法完全表示。所以 d 得到类似 2.99999 的结果,x 最终为 2。
对于这个问题的答案是肯定的,一个 int 范围内的所有整数都必须可以精确地表示为双精度数,并且 floor 必须始终返回该精确表示的值。
c - ANSI C89/ISO C90 中空指针的界限
有没有办法在 ANSI C89/ISO C90 中可移植地确定 void-pointer 值的上限和下限?(我目前没有标准的副本(我家里有一个)。当然,如果保证 void-pointer 值是无符号的,这个任务是微不足道的(通过 sizeof(void *));但是,我不能回想一下这是否得到保证。我可以想到一些非常低效的算法(递增直到溢出等),但我想知道是否有人有相对便宜(就时间复杂性而言)和可移植的方法计算这些界限。)
- 编辑 -
另外:是否有一种可移植的方法来确定指针值的有效性?
原因:这是在与一位同事的讨论中提出的,这让我很困惑。我不知道他在做什么,但我只是想知道,因为我有兴趣!:-)
c - 为什么设置 -std=c99 时 gcc 找不到 random() 接口?
我"#include <stdlib.h>"
在源代码的顶部做。
示例编译:
当我关闭 -std=c99 时,找不到函数 isfinite()。因此,出于这个和其他原因,我确实想使用 -std=c99 。有什么我错过的技巧吗?
c - 在 C89 中转发声明 typedef 结构的更好方法?
以上方法有效,但有更简单(或更好)的方法吗?
.net - 如何为现有的 c 项目创建 VS 解决方案,以便 VS 自动选择新文件?
我想将嵌入式应用程序移植到 x86 以创建模拟器。我们决定尝试 VS2008,但我不知道如何制作 vs 来理解我们现有的目录结构:
- 拱/
- arch/hcs08 -- HAL 实现
- arch/include -- HAL 的公共接口
- arch/x86 --这里应该是仿真层
- 操作系统/
- os/src -- 操作系统层的源代码
- os/include -- 操作系统的公共接口
- 应用程序/ -- 嵌入式应用程序
- 应用程序/app1/src -- app1
- 应用程序/应用程序2/src——应用程序2
我想要3个项目:
- arch & os - 库项目,包含 os/ 、 arch/include/和 arch/x86/*中的所有内容
- app1 - 控制台应用程序项目,包含 apps/app1/* 中的所有内容
- app2 - 控制台应用程序项目,包含 apps/app1/* 中的所有内容
我已经通过手动一一导入文件创建了上述结构,但显然 vs 不会自动选择新文件并且我的项目是平面的(没有文件夹)
操作系统和应用程序层正在不断发展,所以添加新文件真的很烦人。
有什么方法可以让 VS 自动选择所有新文件并保持目录结构?
我知道我可以在 Eclipse CDT 中轻松完成上述操作,但正如我所说,我们想尝试 VS2008。
c - C中函数指针的递归声明
我想声明一个函数,该函数返回指向同一类型函数的指针。
我想用它来实现如下状态机:
我设法使用如下结构解决编译错误:
但这使得 return 语句更加复杂:
我想知道是否有更好的方法在 c 中创建这样的函数指针。