1

首先,我说的是类 UNIX 系统。

我在 Mac OS、Linux、Minix 和 K&R C 书中查看了“FILE”结构的定义,它们都是不同的。

在K&R C书里,很清楚

typedef struct _iobuf{
    int cnt;
    char *ptr;
    char *base;
    int  flag;
    int  fd;
} FILE;

在 Mac OS 上,它在结构中包含更多内容。

在 Linux (3.0) 上,它是

typedef _IO_FILE FILE;

标题显示“在 C++ iostream 之上定义 ISO C stdio”。嗯……?(Linux上的C是由C++实现的?不应该相反吗?)看起来像_IO_FILE定义在libio.h

在 Minix 上,定义与 K&R 非常相似。

我的理解是 stdio.h 应该是 C 的一部分。第一个 C 编译器是由汇编语言实现的。并且 C 应该独立于操作系统类型。

硬件机器码 -> asm -> C -> 更复杂的 C -> UNIX

现在,不同的操作系统(各种UNIX)上有不同的stdio.h,编译器都是gcc。

这个怎么理解?

非常感谢,阿尔弗雷德

4

2 回答 2

5

FILE结构依赖于平台,其字段由 C 库在内部使用。你不应该依赖它里面的东西。

于 2011-08-28T05:38:46.853 回答
1

您自己的 C 代码不应依赖于操作系统。C 头文件和内部 CRT 实现依赖于操作系统。跨平台编程的意义:编写代码,在不同的操作系统上编译,应该可以工作。但是,底层工具(C,跨平台库)正在与特定于操作系统的 API 进行交互,并且它们在不同的操作系统中是不同的。

当然,您不应该使用任何不透明结构的字段,这会破坏平台独立代码。

于 2011-08-28T05:40:31.330 回答