C函数声明在另一个函数内

时间:2011-02-04 08:36:35

标签: c function declaration

任何人都可以向我解释这些内容:

int xyz( void )  
{ 
extern void abc( void );
}

函数定义中的函数声明? 还是我想念一些东西?

5 个答案:

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

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