在我的项目源文件之一中,我找到了这个 C 函数定义:
int (foo) (int *bar)
{
return foo (bar);
}
注意:旁边没有星号foo
,所以它不是函数指针。或者是吗?
递归调用发生了什么?
在没有任何预处理器的情况下,foo
的签名相当于
int foo (int *bar)
我见过人们在函数名称周围放置看似不必要的括号的唯一情况是,当同时存在同名的函数和类似函数的宏时,并且程序员希望防止宏扩展。
这种做法乍一看可能有点奇怪,但 C 库开创了先例:提供一些具有相同名称的宏和函数.
一对这样的函数/宏是isdigit()
。该库可能将其定义如下:
/* the macro */
#define isdigit(c) ...
/* the function */
int (isdigit)(int c) /* avoid the macro through the use of parentheses */
{
return isdigit(c); /* use the macro */
}
您的函数看起来几乎与上面的相同,所以我怀疑这也是您的代码中发生的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)