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