在C中包含头文件的效果

时间:2011-05-27 08:12:33

标签: c file header

在源文件中使用包含头文件(在其中声明的所有函数)的影响是什么?它会影响堆栈大小等吗?

5 个答案:

答案 0 :(得分:6)

它没有任何效果,但会增加编译时间并使代码更难理解和维护。您应该只包含实际需要的标头,并删除那些变得多余的标头。

答案 1 :(得分:6)

这取决于头文件中是否有 definitions 或只是声明。

  

它还完全取决于实现,因为ISO C标准对于如何在该级别完成工作没有任何意义。它仅涵盖事物在“C虚拟机”级别上的行为方式。但我会在这里介绍最可能出现的情况。

诸如int xyzzy;(或更糟,char big_honkin_thing[9999999];)之类的定义可能会占用目标文件中的空间,除非您有一个特别聪明的链接器,否则也会占用可执行文件。我说“可能”,因为这取决于实施。

初始化值更有可能确保它存储在对象中而不是在运行时创建。但是你可能会发现这样的效果,无论是较大的对象/可执行文件,如果它是在编译时创建的,或者(稍微)较慢的启动时间,因为更多的内存必须进行零初始化。

例如,将char big[99999] = {'x'};添加到头文件会导致可执行文件的大小从18K到118K。

typedefextern等简单声明内容不会在对象中分配空间。

此外,即使没有定义的,编译时间也会增加,因为编译器必须处理该头文件。但这不会对运行时(速度或存储)本身产生任何影响。

答案 2 :(得分:4)

堆栈大小由链接器决定。大概你实际上意味着发出的代码是否更大。

包含一个头文件,其声明从未在该转换单元中引用,不会影响生成的对象的大小。当然,它会减慢编译速度。

答案 3 :(得分:2)

它会增加编译时间,但AFAIK不应该有任何其他更改。

答案 4 :(得分:0)

与使用头文件访问源文件相比,直接访问源文件将花费更少的时间,如果标题中没有任何内容可以影响源文件。