在我的main函数中,我调用在头文件中声明的函数。我已在主要文件中导入了我的头文件。但是,编译器给出了函数的未定义引用。头文件的功能的实现在另一个C文件中。要编译和工作我的main,我必须导入C文件。
我的问题是:除了头文件之外,为什么还要导入C文件。
例如,当我包含stdlib.h时,此文件是否也具有其函数的实现或仅具有声明?
答案 0 :(得分:2)
如果你的代码不起作用,除非#include
是一个C文件,你就没有正确编译它。您应该单独编译这两个模块,主模块仅包括其他模块的标题。然后你应该把它们连在一起。
在运行gcc的UNIX上,您可以使用单个命令进行编译和链接:
gcc helper.c main.c
注意:如果您在UNIX上进行开发,您应该学习如何使用makefile来管理单独的编译。 Here is a tutorial covering the use of makefiles for compiling C++ code.
答案 1 :(得分:0)
您不必包含头文件(有时),但必须链接目标文件。对象文件包含您尝试使用的函数体,这就是为什么没有它就无法调用它们。
Read further to find out why headers are important and their history
答案 2 :(得分:0)
'#include'只是告诉编译器你正在使用的文件的接口。(声明)。#include会使编译器满意。
此外,您必须具有通常位于* c文件中的实际实现(定义)。这使链接器感到高兴。
如果包含stdlib.h - 包含正确的C运行时。