使用头文件进行编译

时间:2010-10-16 13:34:27

标签: c gcc

为什么我必须专门编译C源文件:

gcc prog.c -lm

即使我已经将特定的头文件包含在:

#include <math.h>

4 个答案:

答案 0 :(得分:5)

#include文件告诉编译器一个函数是什么样的,它返回什么类型,它采用了多少类型的参数,但它没有告诉编译器内容。

-lm标志包括实际的数学库,其中包含要调用的函数的代码。

它与printf()fread()和其他标准函数的工作方式相同。当您包含stdio.h时,实际上并不包含函数的代码,而是包含定义。因为C库是隐式链接的,所以你不必对此做任何事情,你不会注意到它。

答案 1 :(得分:2)

因为您需要通知编译器链接哪个数学,与math.h包含无关。

答案 2 :(得分:1)

类似于您自己的代码,它应该包含函数声明的头文件(.h)和函数定义的源文件(.c),数学库的代码分为两部分。您包含的头文件包含函数声明:

double sqrt(double n);

但是,它不包含有关这些功能如何工作的任何内容。此代码位于您必须链接的单独文件中,类似于链接不同源文件以创建应用程序的方式。

答案 3 :(得分:0)

因为在C中,头文件和库之间在技术上绝对没有连接。可以有比库更多的头文件,反之亦然。在大多数情况下,只需要1:1的关系,这只是一个惯例问题(当然,这是有道理的)。