首先,我说的是类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 ++ iostreams之上定义ISO C stdio”。嗯...? (Linux上的C是用C ++实现的吗?不应该相反吗?) 看起来_IO_FILE定义在libio.h中
在Minix上,定义与K& R非常相似。
我的unstanding是stdio.h应该是C的一部分。第一个C编译器是用汇编语言实现的。并且C应该独立于OS类型。
HW上的机器代码 - > asm - > C - >更复杂的C - > UNIX
现在,在不同的操作系统(各种UNIX)上有不同的stdio.h,编译器都是gcc。
如何理解这一点?
非常感谢, 阿尔弗雷德
答案 0 :(得分:5)
FILE
结构取决于平台,其字段由C库在内部使用。你不应该依赖它里面的东西。
答案 1 :(得分:1)
您自己的C代码不应该依赖于操作系统。 C头和内部CRT实现依赖于操作系统。跨平台编程的意义:编写代码,在不同的操作系统中编译,它应该工作。但是,底层工具(C,跨平台库)正在与特定于操作系统的API进行交互,并且它们在不同的操作系统中是不同的。
当然,您不应该使用任何不透明结构的字段,这会打破与平台无关的代码。