【发布时间】:2018-07-26 00:43:36
【问题描述】:
所以我一直在做一些阅读,但我仍然在 C 中遇到 extern 关键字的问题。
例如: 我有一个名为: main.c 的文件,在其中我声明了一个函数 int add(int a, int b); (在使用之前)。但是,函数的定义位于 math.c 中。这是否意味着我必须在 main.c (#include math.c/h) 或 main.h 文件中包含 math.c 和/或 math.h 文件才能使用该函数而不会导致编译时错误?或者仅仅声明函数 int add(int a, int b) 就足够了吗?
简而言之:我是否必须包含定义函数声明的文件?
此外,如果仅仅声明函数就足够了,这是一种好的做法,还是链接器会处理它?
谢谢。
【问题讨论】:
-
一般来说,从不使用
#include*.c 文件。但是,如果您想使用 libm 库中的函数,那么最简单的方法是使用:#include >math.h>但是,如果您只是想为自己做更多的工作,那么将该函数的原型写入您的main.c文件 -
正如 user3629249 所说,您不包含 *.c 文件。但是您需要将 *.h 文件包含到您的主文件中(我假设您有一个包含 math.h 声明的文件)并且您需要将 math.c 与 main.c 一起编译,即
gcc main.c math.c -o New_file -
对不起,我认为我的问题被误解了。这与功能本身无关,也与所涉及的数学库无关。选择文件名是为了说明一个场景。我真正要问的问题是链接器,以及具有给定声明定义的文件是否可能包含在使用该函数的文件中。
标签: c linker include declaration extern