相关疑难解决方法(0)

为什么C区分 - >和.?

OK,这是没有严重的后果,但它被窃听我一会:有没有为区分的理由->.运营商?

当然,当前的规则是.作用于结构,并->作用于指向结构(或联合)的指针.但这是它在实践中的运作方式.让我们s成为包含元素的结构x,让它ps成为指向同一形式的结构的指针.

如果你写

s->x
Run Code Online (Sandbox Code Playgroud)

编译器会以这种方式吐出警告

你的意思是sx请重新输入并重新编译.

如果你写

ps.x
Run Code Online (Sandbox Code Playgroud)

编译器会以这种方式吐出警告

你的意思是ps-> x.请重新输入并重新编译.

因为编译器知道两者的类型s并且ps在编译时,它具有解释正确运算符所需的所有信息.我怀疑这不像其他警告(如缺少分号),因为没有关于正确修复的含糊不清.

所以这是对C1x标准委员会的一个假设性提议(由于ISO处于保守状态,因此永远不会被考虑):

给定表达式lhs.rhs,如果lhs是结构或联合类型,则表达式应引用名为rhs的lhs元素.如果lhs是指向结构或-union的类型,则应将其解释为(*lhs).rhs.

这肯定会拯救我们所有的时间,并且让人们更容易学习C [并且我已经教过足够的C来说明学习者发现->事情要么令人困惑或烦恼.]

甚至有先例,C做了一些类似的事情.例如,对于实现的原因,函数声明总是被转换为指针到功能,所以f(x,y)(*f)(x,y)将两者的工作,无论是否f被宣布为一个函数或函数指针.

所以,我的问题是:这个提案有什么问题?你能想到的例子,其中会有致命之间的歧义ps.xs.x,或者为什么保持强制区别,否则有用吗?

c struct

55
推荐指数
7
解决办法
1942
查看次数

标签 统计

c ×1

struct ×1