在c
,你不必在所有打电话给你的任何文件。因此,你可以打电话给你的头mylongheadername.h
,而你打电话给你的源文件a.c
,有一个功能叫justArandomFunctionName
。
但是,你应该知道,你的源文件需要包含头文件。通常,头文件和源文件之间有很强的联系,所以这就是总是以这种方式完成的原因。但是,以下是完全有效的:
a.c : func1 implementation
func2 implementation
b.c : func3 implementation
func4 implementation
c.h : func1 declaration
func3 declaration
d.h : func2 declaration
func4 declaration
不过,也有一些问题,这种方法是使用设置这样的文件(这意味着你必须把额外的工作变成右构建这些文件)时,可能会产生,这只是不好的做法。但是,使用头文件的方式只是惯例,几乎没有任何一个是由该语言执行的。
接下来就是如何的问题,如果头文件不知道该函数定义这个地方可以工作。这个想法是,它不需要知道。
基本上,所有你的头做的是告诉你什么地方定义的符合某个特定的个人资料(什么名字,什么参数,什么返回类型)的函数编译器。当你的编译器读取它时,基本上它所做的就是将所有这些信息混合成一个奇特的名字,然后它将插入到正在调用的文件中,这意味着它仍然不会执行任何操作。下一步,您需要使用链接器将每个文件的编译版本转换为单个可执行文件。这做了很多事情,但其中最重要的一件事是它解决了编译器制作的所有这些奇特的名字。但是,链接器执行此操作的方式是它只是读取文件的所有编译版本,并将函数的定义与其他代码中的实际位置相匹配。因为它只处理你同时拥有的所有东西,所以你的函数在哪里定义并且头文件永远不需要知道这一点。
您好Steve,我不知道引用链接 - #include指令在某种意义上是预处理器的独立功能。它可以用来拉入_anything_包括原始的C代码。该声明被提到的文件内容取代。所以afaik是惯例,不一定是标准(即使头文件的位置不是标准的一部分)。 HTH –