【发布时间】:2012-11-16 01:13:57
【问题描述】:
在我的一个项目源文件中,我找到了这个 C 函数定义:
int (foo) (int *bar)
{
return foo (bar);
}
注意:foo 旁边没有星号,所以它不是函数指针。或者是吗?
递归调用是怎么回事?
【问题讨论】:
-
不,它不是函数指针——它仍然是一个名为 foo 的常规函数。
-
这是完整的功能吗?
-
你有证据表明这个函数被用在了有用的上下文中吗?
-
...看起来像一些虚拟函数,可能只是为了查看它是否在现有源代码中编译而编写的,应该已被删除。我会删除它(如果这是该函数真正所做的),因为充其量它会是无限循环(我不确定是否允许 C 编译器优化该尾调用以跳转),最坏的情况是堆栈溢出。
-
C 声明中的括号有助于使语言不明确。快,
a(b);是什么?将b声明为a类型的变量?或者使用参数b调用函数a?区别在于语法,如果不查找a的声明信息,您甚至无法知道如何解析它;即那些后缀函数调用括号,或声明符周围的可选括号。
标签: c function parentheses