【发布时间】:2020-09-25 16:13:11
【问题描述】:
根据这个问题What's the difference between using extern and #including header files?,我知道extern 对变量非常重要,我完全明白使用extern 变量的意义和基本原理。
但是我仍然无法理解extern 函数背后的想法,我知道它是如何工作的以及链接以及所有这些,但是如果我们在头文件中定义了函数会不会一样?
我只能想到使用动态链接库的好处,因此我们不必在每次库更改时都构建我们的应用程序,但是为什么我会不遗余力地将extern 与静态链接库一起使用而不仅仅是包含头文件。
更新:
我知道定义和声明的区别。
【问题讨论】:
-
注意:默认情况下,所有函数都是
extern链接,除非明确提及static,否则它仅限于文件范围。这些与前向声明(即放入头文件)有什么关系? -
您似乎混淆了“定义”和“声明”这两个术语——它们不是同一个东西,在 C 和 C++ 中具有非常特定的含义
-
我不太明白这个问题。是否在头文件中或其他地方声明一个函数,以及是否声明它
extern,是单独的问题,不是吗? -
您通常不需要在函数声明上使用
extern,无论它们在哪里。人们经常这样做,出于风格或习惯的原因。 Linux 内核头文件中充满了externs。 -
(a) 编辑问题以澄清是否询问了声明和/或定义。如果没有询问头文件中的定义,请删除对定义的提及。 (b) 编辑问题以添加示例。 (c) 编辑问题以删除短语“
externfunction”。我认为在这一点上,您正在询问“使用extern的函数声明”。 (c) 说明您认为动态链接库和与之相关的静态链接库之间有什么区别。