首先,我说的是类unix系统。
我看了一下Mac OS, Linux, Minix和K& C书中"FILE"结构的定义,它们都是不同的。
在K& rc书中,很清楚
typedef struct _iobuf{
int cnt;
char *ptr;
char *base;
int flag;
int fd;
} FILE;
在Mac OS上,在结构体中有更多的内容。
在Linux(3.0)上,它是
typedef _IO_FILE FILE;
头写着"在c++的iostreams之上定义ISO C studio"。他们……? Linux上的C是用c++实现的吗?不应该是相反的吗?)看起来_IO_FILE的定义在libio.h
中在Minix上,的定义与K& r非常相似。
我的理解是stdio.h应该是C的一部分。第一个C编译器是由汇编语言实现的。C应该独立于OS类型。
HW -> asm -> C ->更复杂的C -> UNIX上的机器码
现在,不同的操作系统(各种UNIX)上有不同的stdio.h,编译器都是gcc。
如何理解?
非常感谢。阿尔弗雷德
FILE
结构体是平台相关的,它的字段由C库内部使用。你不应该依赖于它里面的东西
您自己的C代码不应该依赖于操作系统。C头文件和内部CRT实现依赖于操作系统。跨平台编程的意义:编写代码,在不同的操作系统中编译,应该可以工作。然而,底层工具(C,跨平台库)是与特定于操作系统的API交互的,它们在不同的操作系统中是不同的。
当然,你不应该使用不透明结构的字段,这会破坏与平台无关的代码。