'exit' undefined; assuming extern returning int 这个警告的原因

原文地址:http://blog.sina.com.cn/s/blog_771bd2c901010n1f.html


因为在stdio.h这个头文件里面没有包含exit()函数,exit()函数所在的头文件在stdlib.h和process.h中

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)