使用函数名称作为函数指针
C90 的基本原理文档提供了对将函数名称与函数指针等同的设计选择的深入了解。这种便利简化了在特定上下文中使用函数指针的过程。
函数声明
考虑声明:
int f(); int (*pf)();
函数调用
以下所有表示有效的函数调用:
(&f)(); f(); (*f)(); (**f)(); (***f)(); pf(); (*pf)(); (**pf)(); (***pf)();
每行的第一个表达式之前已介绍过。第二种是常规的。在大多数情况下,后续表达式意味着函数指示符隐式转换为指针值。
设计原理
委员会认为允许这些形式并查看没有明显的缺点将其视为过度努力而取缔。因此,函数指示符和函数指针之间的等价性为指针使用提供了便利。
隐式转换
另一个有趣的观察是使用时函数类型到指针的隐式转换作为参数但不作为返回类型:
typedef bool FunctionType(int); void g(FunctionType); // Implicitly converts to void g(FunctionType *) FunctionType h(); // Error FunctionType *j(); // Returns a function pointer with the type bool(int)
以上是为什么C90中函数名可以用作函数指针?的详细内容。更多信息请关注PHP中文网其他相关文章!