首页  >  文章  >  后端开发  >  `widget w(gadget(), doodad());` 是 C 语言中的变量声明还是函数声明?

`widget w(gadget(), doodad());` 是 C 语言中的变量声明还是函数声明?

Barbara Streisand
Barbara Streisand原创
2024-11-19 08:43:03682浏览

Is `widget w(gadget(), doodad());` a Variable Declaration or a Function Declaration in C  ?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn