您的位置:首页 > 编程语言 > C语言/C++

对c语言预处理中头文件包含的一些新的理解

2017-12-23 23:15 211 查看
     对于一个c的源文件而言,它可以单独被编译,也就是说编译的单位就是源文件。虽然在编译的时候可以指定多个源文件,但是编译器(如gcc)内部还是一个接着一个编译成目标文件的,最后在链接的时候才是多个目标文件一起进行链接的。

     我们都听说过或者说好多资料书上都有写,在大规模的c程序中需要头文件保护,也就是使得同一个头文件只能被包含一次。但是这里没有说清楚的是头文件只能包含一次的上下文。

     举个例子假设我们程序只有一个a.c文件,在该文件中包含了两次<stdio.h>,那么编译a.c文件的时候,实际在预处理时,因为有头文件保护所以实际情况下<stido.h>只是被包含了一次,我们可以通过gcc -E a.c这条命令可以看出;假设我们程序有a.c和b.c这两个文件,这两个文件各只包含一次<stdio.h>,那么在编译a.c和b.c的时候,<stdio.h>这个头文件又被包含了几次呢,一次?如果使用gcc -E a.c b.c这条命令我们可以看出<stido.h>实际上被包含了两次,不是有头文件保护吗,为什么包含了两次。答案很简单,因为编译的时候是以源文件为单位的,也就是说在编译一个源文件这个上下文中,同一个头文件只能被包含一次,而不是对一个程序中的多个源文件而言同一个头文件只能包含一次。

     最后总结一下,在有头文件保护以及一个源文件编译的时候,同一个头文件才只能被包含一次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: