【发布时间】:2011-08-19 18:11:51
【问题描述】:
我已经仔细阅读了可能的重复项,但是没有一个答案会陷入其中。
tl;dr:C 中的源文件和头文件是如何关联的?项目是否在构建时隐式整理声明/定义依赖关系?
我试图了解编译器如何理解.c 和.h 文件之间的关系。
鉴于这些文件:
header.h:
int returnSeven(void);
source.c:
int returnSeven(void){
return 7;
}
main.c:
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main(void){
printf("%d", returnSeven());
return 0;
}
这个烂摊子会编译吗?我目前正在使用来自 Cygwin 的 gcc 在 NetBeans 7.0 中进行工作,它可以自动执行大部分构建任务。编译项目时,所涉及的项目文件是否会根据header.h 中的声明来整理source.c 的隐含包含?
【问题讨论】:
-
是的,这将编译(为什么你认为这是一个“混乱”?)。要了解的概念是编译单元和链接。
-
谢谢Jesper;哈哈,这不是乱七八糟的,我想这个词最好用来描述我的大脑,在 3 个初级水平之间阅读
C书籍。我肯定会研究编译单元和链接,但是为了专注于学习语法,我会让NetBeans + gcc 帮我解决这个问题。鉴于此,只要给定的头文件具有在项目中其他地方存在定义的声明,包含该头文件就足以提供对已定义功能的访问,并且编译器会整理出细节? -
header.h需要包括警卫;) -
另外我建议手动编译。
gcc main.c -c -o main.o、gcc source.c -c -o source.o、gcc main.o source.o -o program将编译它。它可以很容易地看到单独的编译单元和最后的链接。
标签: c compilation header-files