【发布时间】:2017-02-11 02:15:47
【问题描述】:
我很困惑是否使用 extern 在 C 中进行函数的前向声明。场景是每个函数都在单独的 .c/.cpp 文件中。我从这个问题中了解到 - External linkage of const in C ,如果所有都是 .c 文件,我不应该使用 extern 进行前向声明,无论函数是否定义在同一个文件中。
但是我想更多地了解何时显式使用 extern 进行前向声明(我认为当前向声明的函数是用与调用不同的语言定义的时,需要 extern),以及任何需要注意的事项知道。
【问题讨论】:
-
函数默认为
extern,你可以在前向声明中使用或省略这个关键字,含义不变。 -
@n.m.使用 extern,编译器会忽略签名,我的意思是类型检查没有完成。所以,不需要的时候不要使用。
-
“编译器忽略签名”错误。谁告诉你的?
-
@n.m.对不起,我误会了……
-
“编译器忽略签名”(感知)问题发生在您在 c 文件中使用 extern 进行前向声明时。编译器实际上正在按照您的要求进行操作,但是您的 extern 声明可能与另一个文件中的实际函数声明不匹配。编译器不检查(链接器也不检查)。这就是为什么我们将前向声明放在头文件中,而不是将它们随机分布在 c 文件中。也就是说:c 文件中的
extern是否修改了声明,或者它是默认值?,为什么人们一直试图这样做!
标签: c++ c extern forward-declaration linkage