C 最令人烦恼的解析:揭开函数声明的神秘面纱
同时理解 widget w() 的语法;很简单,许多程序员都很难理解以下代码片段如何表示函数声明:
widget w( gadget(), doodad() ); // pitfall: not a variable declaration
要解开这个谜团,深入研究 C 的衰减规则至关重要。在函数声明中,数组类型的参数退化为指向第一个元素的指针,而函数类型的参数则转换为函数指针。
应用这个原理,上述代码转换为以下签名:
widget w( gadget(*)(), doodad(*)() );
这表示一个接受两个参数的函数:一个指向不带参数并返回小工具类型的函数的指针,以及一个指向也带零个参数和返回一个 doodad 类型。该函数本身返回一个小部件。
复杂性还不止于此。考虑这个令人困惑的例子:
widget w(gadget(x));
鉴于 x 是一个变量,这怎么可能是一个函数声明?
在 C 中,声明变量时允许包含额外的括号,例如小工具x;和小工具(x);。这也适用于函数参数,允许将上述代码解释为函数声明,该函数声明采用一个名为 x 的 gadget 类型参数并返回一个小部件。
以上是`widget w(gadget(), doodad());` 是 C 语言中的变量声明还是函数声明?的详细内容。更多信息请关注PHP中文网其他相关文章!