问题标签 [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.

0 投票
11 回答
41050 浏览

c - ANSI C 和 K&R C 之间的主要区别是什么?

关于 ANSI C的维基百科文章说:

ANSI C 标准化过程的目标之一是生成 K&R C(第一个发布的标准)的超集,其中包含随后引入的许多非官方特性。然而,标准委员会还包括了一些新特性,例如函数原型(借用自 C++ 编程语言)和功能更强大的预处理器。参数声明的语法也进行了更改以反映 C++ 风格。

这让我觉得存在差异。但是,我没有看到K&R C和ANSI C的比较。有没有这样的文件?如果不是,主要区别是什么?

编辑:我相信 K&R 书的封面上写着“ANSI C”。至少我相信我家里的版本是这样的。所以也许不再有区别了?

0 投票
8 回答
96864 浏览

c - C 中的变量声明位置

我一直认为在 C 中,所有变量都必须在函数的开头声明。我知道在 C99 中,规则与 C++ 中相同,但 C89/ANSI C 的变量声明放置规则是什么?

以下代码使用gcc -std=c89and成功编译gcc -ansi

不应该在 C89/ANSI 模式下声明cs导致错误吗?

0 投票
6 回答
13074 浏览

c - C89、C90 或 C99 中的所有功能都需要原型吗?

为了真正符合标准,C 中的所有函数(除了 main)是否都必须有一个原型,即使它们只是在同一个翻译单元中定义后才使用?

0 投票
6 回答
23797 浏览

c - 用于表示 ANSI (C89/90) C 中的字节的类型?

是否有标准投诉方法来表示 ANSI (C89/90) C 中的字节?我知道,大多数情况下,一个字符恰好是一个字节,但我的理解是,不能保证是这种情况。另外,C99 标准中有 stdint.h,但 C99 之前使用的是什么?

我对 8 位和一个“字节”(sizeof(x) == 1)都很好奇。

0 投票
3 回答
1121 浏览

c - floor() 是否返回完全可表示的东西?

在 C89 中, floor() 返回一个双精度值。以下是否保证工作?

我担心的是 floor 的结果在 IEEE 754 中可能无法完全表示。所以 d 得到类似 2.99999 的结果,x 最终为 2。

对于这个问题的答案是肯定的,一个 int 范围内的所有整数都必须可以精确地表示为双精度数,并且 floor 必须始终返回该精确表示的值。

0 投票
6 回答
1278 浏览

c - ANSI C89/ISO C90 中空指针的界限

有没有办法在 ANSI C89/ISO C90 中可移植地确定 void-pointer 值的上限和下限?(我目前没有标准的副本(我家里有一个)。当然,如果保证 void-pointer 值是无符号的,这个任务是微不足道的(通过 sizeof(void *));但是,我不能回想一下这是否得到保证。我可以想到一些非常低效的算法(递增直到溢出等),但我想知道是否有人有相对便宜(就时间复杂性而言)和可移植的方法计算这些界限。)

- 编辑 -

另外:是否有一种可移植的方法来确定指针值的有效性?

原因:这是在与一位同事的讨论中提出的,这让我很困惑。我不知道他在做什么,但我只是想知道,因为我有兴趣!:-)

0 投票
4 回答
14550 浏览

c - 为什么设置 -std=c99 时 gcc 找不到 random() 接口?

"#include <stdlib.h>"在源代码的顶部做。

示例编译:

当我关闭 -std=c99 时,找不到函数 isfinite()。因此,出于这个和其他原因,我确实想使用 -std=c99 。有什么我错过的技巧吗?

0 投票
1 回答
1287 浏览

c - 在 C89 中转发声明 typedef 结构的更好方法?

以上方法有效,但有更简单(或更好)的方法吗?

0 投票
2 回答
323 浏览

.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。

0 投票
2 回答
5000 浏览

c - C中函数指针的递归声明

我想声明一个函数,该函数返回指向同一类型函数的指针。

我想用它来实现如下状态机:

我设法使用如下结构解决编译错误:

但这使得 return 语句更加复杂:

我想知道是否有更好的方法在 c 中创建这样的函数指针。