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代码。

更现代的代码通常会从头文件中获取函数原型。