c标准对头文件的解释:
标准头文件要有3点特征:
1)幂等性:多次包含和只包含一次没差别
2)相互独立性:标准头文件之间不可互相包含//说明楼上cpazstido是错的
3)文件级别:头文件要在全局作用域内被包含,在其他作用域内(例如函数块内)被包含行为未定义。

另外,c允许良性重定义。也就是重定义一个名字没有造成危害那么重定义不会导致编译出错或报警。

这就可以解释为什么两个头文件都有exit函数了。因为标准c要求c库实现exit函数,而最早标准c没有支持多线程,所以exit在stdlib.h中声明。后来多线程出现了,c为了支持多线程而出现了process.h,在其中自然而然要声明exit,两处声明完全相同,所以是良性重定义且符合c边准给头文件的限制。如果在stdlib.h中删除exit得声明那将导致许多现有的程序无法正确声明exit,这就是向后兼容性的考虑。

最后,c语言允许没有声明就使用函数,没显式声明的函数被隐式声明成:
extern int funname(void);
所以在c中需要对函数正确声明使得编译器可以正确检查参数匹配(对于可变参数函数例如printf如果没有正确声明调用将出错,对一般函数虽然没有声明但是因为_cdecl调用方式由调用方清理参数所以即使参数传入与错误声明不一致也能正常工作)
注意,在C++中使用函数前必须声明,否则将无法编译,这点与c不同。

补充关于良性重定义:
下面的例子都是良性重定义:
#define a 1
#define a 1
int fun(int);
int fun(int);
下面的例子是恶性重定义,将导致编译出错或警告:
#define a 1
#define a 2 /*重定义警告*/
int a = 4;
int a = 4;/*重定义错误*/

补充一些为了兼容性考虑或者完备性考虑而良性重定义的例子:
1) define NULL (void *)0
几乎所有c边准头文件(15个)都重定义了NULL
2)malloc.h和stdlib.h都包含了malloc函数

http://zhidao.baidu.com/question/134509702.html?fr=ala0

exit函数的头文件问题相关推荐

  1. c语言 recv_sin,C++_C语言中经socket接收数据的相关函数详解,recv()函数: 头文件:#incl - phpStudy...

    C语言中经socket接收数据的相关函数详解 recv()函数:头文件: #include #include 定义函数: int recv(int s, void *buf, int len, uns ...

  2. c++常用函数所在头文件一览

    c++常用函数所在头文件一览 函数           包含              类别              功能 _atold             math.h            ...

  3. 【Android 内存优化】libjpeg-turbo 函数库交叉编译与使用 ( 交叉编译脚本编写 | 函数库头文件拷贝 | 构建脚本配置 | Android Studio 测试函数库 )

    文章目录 一.交叉编译 Shell 脚本参考 二.NDK r16b 版本配置 三.libjpeg-turbo 交叉编译 Shell 脚本 四.执行 libjpeg-turbo 交叉编译 Shell 脚 ...

  4. c+pow函数的头文件_pow()函数以及C ++中的示例

    c+pow函数的头文件 C ++ pow()函数 (C++ pow() function) pow() function is a library function of cmath header ( ...

  5. linux延时函数及头文件,linux延时函数

    应用程序的延时函数: 头文件: #include 函数:unsigned int sleep (unsigned int seconds);//n秒 此外:int usleep (useconds_t ...

  6. 标准C函数库头文件、POSIX标准库头文件和Windows API函数库头文件说明

    1. 标准C函数库头文件 名字 源自 描述 <assert.h> 包含断言宏,被用来在程序的调试版本中帮助检测逻辑错误以及其他类型的bug. <complex.h> C99 一 ...

  7. [Cherno C++ 笔记 P1~P10]安装、链接器、变量、函数、头文件

    [Cherno C++ 笔记 P1~P10]安装.链接器.变量.函数.头文件 系列博客 前言 视频链接 P1~P4 安装部分 P5 C++是如何工作的 第一个C++程序 代码如何编译为二进制文件 第一 ...

  8. 单片机sleep函数的头文件_C语言中的sleep() 函数

    展开全部 关于sleep()函数在windows系统和linux系统下是两个不同的函数,差别较大,但功能是相同的,都是将进程挂起e68a8462616964757a686964616f31333337 ...

  9. 单片机sleep函数的头文件_c语言的 sleep函数到底在哪个头文件里啊

    展开全部 在里面. 在VC中使用时,sleep函数的头文件为windows.h,在Linux下,gcc编译器中,使用的头文件因gcc版本62616964757a686964616fe59b9ee7ad ...

最新文章

  1. lede 插件_家中路由换新——lede软路由安装教程
  2. 阿里2018营收2502亿元,云计算业务增幅超100%
  3. 认识计算机硬件观评课,观课听课评课评语
  4. 网络编程学习笔记(socketpair函数)
  5. 使用Apache Archiva搭建Maven Repository Server
  6. 知识图谱(历史回顾及技术挑战)
  7. java做a_Java编程实现A*算法完整代码
  8. 使用windows server backup备份还原hyper-v 3.0虚拟机
  9. java 数组的get set_java.lang.reflect.Array.setBoolean()方法
  10. java date 转换sql date_java.util.Date和java.sql.Date之间的转换
  11. 为什么事务日志自动增长会降低你的性能
  12. 转 @PathVariable是什么?详情及用法解析
  13. 20款免费公司企业wordpress主题
  14. java编程题全集及答案_JAVA编程题全集(100题及答案)q
  15. rgba和hex之间转换
  16. 测度论与概率论基础学习笔记1——1.1 集合及其运算
  17. 士兵 POJ1723
  18. linux固态硬盘检测,linux 检查硬盘是 SSD or HDD
  19. InsightFace又出新作!合成更真实更多样近红外人脸图片,助力“近红外-可见光”跨域人脸识别...
  20. Vue报错:component has been registered but not used

热门文章

  1. 华为交换机之SNMP管理
  2. java 转型概念_转型(java)(.net)
  3. php 单例模式 序列化,php设计模式(二)单例模式
  4. linux ssh客户端工具
  5. 19、HTML5 新的 Input 类型
  6. Python网络数据采集2-wikipedia
  7. iOS之runtime
  8. Xcode7 项目转 Xcode6 时 出现问题
  9. sql 把多列内容合并
  10. 安卓开发之Handler、HandlerThread学习篇