ISO C 与POSIX 的关系

我们经常会看到”ISO C “以及 “POSIX 接口”,那么究竟什么是ISO C,究竟什么POSIX,它们之间有什么联系与区别呢?

ISO C就是 International Organization for Standardization 国际标准化组织为了提高C语言的移植性而设立的C语言标准,里面包含两部分:C语法及语义;C标准函数库。其中只是定义了C标准函数库的函数原型、函数功能,而并未定义函数的具体实现
其中C标准函数库的头文件包括以下:

头文件 说明
assert.h 验证程序断言
complex.h 复数运算
ctype.h 字符分类与映射
errno.h 出错码
fenv.h 浮点环境
float.h 浮点常亮以及特性
inttypes.h 整形格式变换
iso646.h 赋值、关系以及一元操作宏
limits.h 编译时限制性常量
math.h 数学函数
setjmp.h 非局部跳转
signal.h 信号
stdarg.h 可变参数
stdbool.h bool类型
stddef.h 标准定义
stdint.h 整形
stdio.h 标准输入输出
stdlib.h 标准函数
string.h 字符串相关函数
time.h 时间和日期
wctype.h 宽字符分类与映射
wchar.h 扩充的多字节和宽字符支持

这个标准粗来以后有啥用处哇?主要是这样子的,时间上有很多厂商、公司都在开发自己的C编译器,可是每个厂商的实现都可能不一样哇,如果没有标准的限制 那么大家对标准库函数的定义就会千差万别,那么这样就很不利于C程序在源码级从一种编译器移植到另外一种编译器···

举个例子 张三在VS 2015中写了一段很牛逼的代码,他觉得自己的代码特别稳,他写这些代码调用了很多VS给他提供的现成函数接口 例如像printf呀。。。。然后张三把代码丢给李四,可是李四用的是什么borland公司的C编译器。。。如果没事ISO C标准,那么vs和borland就可以将用一个printf解释为不同含义···,例如VS认为printf应该是输出函数,而borland却认为这个是输出函数。

如果有两个编译器都声称他们遵循ISO C标准,那么凡是ISO C白字黑字规定了的,两个编译器都应该严格执行。

POSIX 是Portable Operating System Interfaces 的缩写,是由IEEE制定胡标准簇。这些标准的制定目的是为了提升应用程序在不同UNIX系统环境之间的可移植性。这个标准是ISO C的超集。 它不仅包含ISO C部分,还定义了很多系统服务接口,例如:socket相关接口,pthread线程相关接口等。同样的,POSIX也只是定义接口,而不定义具体的实现。
POSIX标准定义的头文件包括:

<aio.h>
<arpa/inet.h>
<assert.h>
<complex.h>
<cpio.h>
<ctype.h>
<dirent.h>
<dlfcn.h>
<errno.h>
<fcntl.h>
<fenv.h>
<float.h>
<fmtmsg.h>
<fnmatch.h>
<ftw.h>
<glob.h>
<grp.h>
<iconv.h>
<inttypes.h>
<iso646.h>
<langinfo.h>
<libgen.h>
<limits.h>
<locale.h>
<math.h>
<monetary.h>
<mqueue.h>
<ndbm.h>
<net/if.h>
<netdb.h>
<netinet/in.h>
<netinet/tcp.h>
<nl_types.h>
<poll.h>
<pthread.h>
<pwd.h>
<regex.h>
<sched.h>
<search.h>
<semaphore.h>
<setjmp.h>
<signal.h>
<spawn.h>
<stdarg.h>
<stdbool.h>
<stddef.h>
<stdint.h>
<stdio.h>
<stdlib.h>
<string.h>
<strings.h>
<stropts.h>
<sys/ipc.h>
<sys/mman.h>
<sys/msg.h>
<sys/resource.h>
<sys/select.h>
<sys/sem.h>
<sys/shm.h>
<sys/socket.h>
<sys/stat.h>
<sys/statvfs.h>
<sys/time.h>
<sys/times.h>
<sys/types.h>
<sys/uio.h>
<sys/un.h>
<sys/utsname.h>
<sys/wait.h>
<syslog.h>
<tar.h>
<termios.h>
<tgmath.h>
<time.h>
<trace.h>
<ulimit.h>
<unistd.h>
<utime.h>
<utmpx.h>
<wchar.h>
<wctype.h>
<wordexp.h>

猜你喜欢

转载自blog.csdn.net/jmh1996/article/details/80459787