在我的项目源文件之一中,我找到了以下C函数定义:
int (foo) (int *bar)
{
return foo (bar);
}
注意:旁边没有星号foo
,因此它不是函数指针。还是?递归调用在这里发生了什么?
7
不,它不是函数指针-仍然是名为foo的常规函数。
—
Nemanja Boric 2012年
这是完整功能吗?
—
asheeshr 2012年
您是否有证据证明此功能在有用的上下文中使用?
—
moooeeeep 2012年
...看起来像一些伪函数,可能只是为了查看它是否已在现有源代码中编译而编写的,应该已被删除。我会删除它(如果那是函数真正的作用),因为充其量是死循环(我不确定是否允许C编译器优化该尾调用来跳转),这是最糟糕的堆栈溢出。
—
海德
C声明中的括号有助于消除该语言的歧义。快速,什么是
—
卡兹(Kaz)2012年
a(b);
?声明b
为类型变量a
?还是a
带有参数的函数调用b
?区别是语法上的,如果不查找a
; 的声明信息,就无法知道解析该方法的方式。即是那些postfix函数调用括号,还是声明符周围的可选括号。