2011-04-07 33 views
1

如何为一个函数创建头文件并在不同文件中实现该函数?另外,你如何在另一个文件中拥有main并调用这个函数? 的好处是,这个函数将成为一个可以重用的独立组件,对吗?函数头和在不同文件中的实现C

+0

[在C++中为什么有头文件和cpp文件?]的可能的重复(http://stackoverflow.com/questions/333889/in-c-why-have-header-files-and-cpp-files) – GWW 2011-04-07 03:30:04

回答

0

在C/C++中,非内联函数只能定义一次。如果将头文件中的函数定义为 ,那么当头文件包含多次时,将会出现“多重定义”链接错误。

+0

我不会在头文件中放入func defn。我将分别包含foo.h和foo.c,其中包含声明和实现。我怎么做? – Namratha 2011-04-07 03:52:36

+0

我对你的问题感到困惑,你能说清楚吗? – burningice 2011-04-07 04:03:25

+0

请参阅此。这里解释。 http://stackoverflow.com/questions/5575700/error-expected-asm-or-attribute-before-token-in-c/5575804#5575804 – Namratha 2011-04-07 04:06:56

4

这是最好的例子。

说我们想要一个函数来找到一个整数的立方体。

你将不得不在,比方说在定义(实现),cube.c

int cube(int x) { 
    return x * x * x; 
} 

然后我们把功能声明在另一个文件中。按照惯例,这在这种情况下在header file,cube.h中完成。

int cube(int x); 

我们现在可以从别的地方,driver.c例如,通过使用#include指令(这是C预处理程序的一部分)调用该函数。

#include "cube.h" 

int main() { 
    int c = cube(10); 
    ... 
} 

最后,您需要将每个源文件编译成一个目标文件,然后链接它们以获取可执行文件。

使用GCC,例如

$ gcc -c cube.c     #this produces a file named 'cube.o' 
$ gcc -c driver.c    #idem for 'driver.o' 
$ gcc -o driver driver.c cube.C#produces your executable, 'driver' 
1

其实你可以实现在头文件中的任何功能获得更好的性能(实现例如库时),只要不被引用的特定对象(实际上它赢得不会编译它)。 顺便说一句,即使有这种方式,你有单独的接口和实现;) 当然,你将包括在你的头文件gurads,以避免“多重定义”的错误。