首页 > 后端开发 > C++ > 为什么 C 的'最令人烦恼的解析”将变量声明误解为函数声明?

为什么 C 的'最令人烦恼的解析”将变量声明误解为函数声明?

Barbara Streisand
发布: 2024-12-01 13:12:12
原创
337 人浏览过

Why Does C  's

C 语言最令人烦恼的解析重温

当看似无害的语句可以被解释时,C 中臭名昭著的“最令人烦恼的解析”现象就会出现作为函数声明或变量声明。这可能会导致意外的行为和难以调试的错误。

一个经典的例子是代码片段:

widget w( gadget(), doodad() );
登录后复制

乍一看,这似乎是一个变量声明名为 w 的小部件,带有带括号的初始值设定项。然而,经过仔细检查,我们意识到 gadget() 和 doodad() 是函数调用,使该语句成为函数声明。

之所以会出现歧义,是因为数组类型的函数参数衰减为指向其第一个元素的指针,而函数类型的函数参数会衰减为函数指针。这意味着上面函数的签名实际上是:

widget w( gadget(*)(), doodad(*)() );
登录后复制

换句话说,它接受两个函数指针作为参数并返回一个小部件。

当变量出现时,会出现更令人困惑的情况涉及到:

widget w(gadget(x));
登录后复制

由于 x 是一个变量,所以似乎不可能将其解释为函数声明。然而,C 允许在变量声明中使用额外的括号。因此,小工具 x;和小工具(x);声明相同的变量 x。

因此,上面的代码可以被解析为一个函数声明,它采用名为 x 的 gadget 类型的单个参数并返回一个小部件。这证明了理解复杂的 C 语法以避免这些微妙陷阱的重要性。

以上是为什么 C 的'最令人烦恼的解析”将变量声明误解为函数声明?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板