在C中包含头文件的效果

Ble*_*mer 3 c header file

包含头文件的效果是什么,在源文件中使用的所有函数都没有?它会影响堆栈大小等吗?

小智 6

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


pax*_*blo 6

这取决于头文件中是否有定义或只是声明.

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

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

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

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

简单的声明类似的东西typedef,extern并不会在对象中分配空间.

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