任何人都可以向我解释这些内容:
int xyz( void )
{
extern void abc( void );
}
函数定义中的函数声明? 还是我想念一些东西?
答案 0 :(得分:11)
是的,你的猜测是正确的。它声明了函数abc()
的存在,因此可以在xyz()
中引用它。请注意,extern
是不必要的,因为默认情况下函数为extern
。
答案 1 :(得分:2)
C中的“extern”声明用于表示全局变量或函数的存在和类型。
extern是在当前模块外部定义的东西。
查找声明为extern的函数原型也并不罕见。
只有当它不是默认值时,才需要它,和/或你想指定“C”链接的地方。
答案 2 :(得分:2)
这种宣言方式有一个很大的优势:
如果只有一个或更少的函数调用外部函数,则此声明特别适用于大型源文件。 如果必须进行稍后的代码重构(在另一个文件中移动函数),则更容易看到依赖关系,而不是在全局(文件)范围上添加外部。 在后一种情况下,"遗忘"文件中的这种外部更高。相反,通过在函数范围内声明它,声明将与函数...一起移动。
我也倾向于为外部全局变量这样做 - 在维护并最终重构/最小化依赖关系时,好处会随之产生。
关于该主题的最后一个注释"写外部/非外部": 如果它只是一个前向声明( - >该函数是在同一个文件的末尾定义的),我不建议使用外部 - 因为它根本不是这种情况。 否则外部绝对意味着必须在其他地方找到定义(或者对于libaries:可能需要由该库的用户实现)。
希望这会有所帮助(作为更客观的编程风格的一步...... :))
答案 3 :(得分:0)
是的,你的陈述是正确的......当我们使用extern func_name时,w正在声明func_name。
答案 4 :(得分:0)
我想补充一点,根据我的经验,这种结构在现代代码中并不常见,但在较旧的代码中常见,尤其是“K& R”C代码。
更现代的代码通常会从头文件中获取函数原型。