函数应该在头文件中制作
extern
吗?或者它们是默认的extern
?
例如,我应该这样写:
// birthdays.h
struct person find_birthday(const char* name);
或者这个:
// birthdays.h
extern struct person find_birthday(const char* name);
来自C 书:
如果声明包含 extern 存储类说明符,或者是 函数声明不带 存储类说明符(或两者), 然后:
- 如果已经有该标识符的可见声明 文件范围,生成的链接是 与可见的相同 声明;
- 否则结果是外部链接。
因此,如果这是在翻译单元中声明的唯一一次,它将具有外部链接。
它们是用“extern”隐式声明的。
标头中声明的函数通常是(除非你真的很努力)
extern
。就我个人而言,我更喜欢在那里看到显式关键字 - 但编译器不需要它。它提醒读者,他们是extern
,而且由于人类比计算机更容易犯错,我发现这个提醒很有帮助。
对于变量,在头文件中使用
extern
关键字(并且不使用初始值设定项)非常重要。因此,为了与标头中声明的(很少)全局变量对称,我也将 extern
与该函数一起使用 - 尽管这完全没有必要。
头文件中的函数应该是 extern 吗?
在这方面,我认为将 extern 放在标头中更正确。 然而,编译器是故意这样做的,因为有些糟糕的程序员不知道更好的东西。
或者它们默认是外部的?