C 程序的可移植性

时间:2023-01-05 22:00:34

不是说 C 语言是一门跨平台的语言吗?不尽然,不同的平台对C语言做了不同程度的支持和拓展,所谓的拓展即是在原有的C标准的基础上,又设计和实现了高层的api。

如果只在 windows 平台下开发,或者只在 linux 平台下开发,也即只在单一平台下开发,是不会遇到程序移植性的问题的。本文以windows的观点,认识一些windows为 C 标准库做的拓展,也即如下的函数(api)不具有可移植性,也即这些函数,你可能在windows平台下用着十分顺手,如果考虑到跨平台的特性,则在开发时应当避免这个函数的调用,或者在最终跨平台使用时,使用C/C++标准中的函数或者语句的组合对这些不具可移植性的程序进行替换。

fflush()

windows 平台(vc6/vs系列编译器)支持fflush()(位于<stdio.h>)清空文件流中的数据。MSDN 对其的说明为:

fflush on input stream is an extension to the C standard(fflush 操作输入流是对 C 标准的扩充)。

int fflush(FILE * );
                // stdin/stdout/stderr 是一些特殊的FILE*

Sleep()

位于Windows.h头文件:

VOID Sleep(DWORD dwMilliseconds);