exit函数的头文件问题
来源:互联网 发布:中兴视觉大数据 垃圾 编辑:程序博客网 时间:2024/06/10 15:49
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函数的头文件问题
- 【MFC】头文件内的函数重定义问题
- 关于头包含头文件的问题
- _tcscat_s函数的头文件
- 一些函数的头文件
- CreateToolhelp32Snapshot函数的头文件
- APUE头文件的问题
- ITK的头文件问题
- 头文件的小问题
- 关于头文件的问题
- 头文件互相的问题
- error头文件的问题
- 关于头文件文件包含的问题
- glut.h头文件总是和C++中定义的exit冲突
- 从exit函数到c标准对头文件的解释
- exit()函数的用法
- exit函数的妙用
- 一个包含所有C++头文件的头函数
- 信用卡跑马圈地结束后我们何去何从?
- 页面定时刷新的几种解决方案
- 出错处理函数abort、exit、atexit、strerror
- 深入浅出 Ajax 读书摘记1——【使用Ajax】
- CStatusBar和CStatusBarCtrl默认行为(风格)差异
- exit函数的头文件问题
- I GET MY SCHOLARSHIP
- VBS中FileSystemObject对象详解
- 测试货币银行学期末复习
- 国家是什么玩意?
- system函数用法
- 如何隐藏system函数的窗口
- 如何隐藏system函数的窗口
- SQLserver生成随机数