我们知道sizeof
是一个运算符,用于计算任何数据类型和表达式的大小,当操作数是表达式时,可以省略括号。
int main()
{
int a;
sizeof int;
sizeof( int );
sizeof a;
sizeof( a );
return 0;
}
的第一次使用sizeof
是错的,而其他人是对的。
使用gcc编译时,会给出如下错误信息:
main.c:5:9: error: expected expression before ‘int’
我的问题是为什么C标准不允许这种操作。将要sizeof int
造成任何歧义吗?
以下内容可能会产生歧义:
sizeof int * + 1
Is that (sizeof (int*)) + 1
, or (sizeof(int)) * (+1)
?
显然,C 语言可以引入一个规则来解决歧义,但我可以想象为什么它没有麻烦。就目前的语言而言,类型说明符永远不会在表达式中“裸露”出现,因此不需要规则来解析第二个*
是类型或算术运算符的一部分。
现有语法确实已经解决了潜在的歧义sizeof (int *) + 1
. It is (sizeof(int*))+1
, not sizeof((int*)(+1))
.
C++ 有一个类似的问题需要通过函数式转换语法来解决。你可以写int(0)
你可以写typedef int *intptr; intptr(0);
,但你不能写int*(0)
。在这种情况下,解决方案是“裸”类型必须是一个简单的类型名称,它不能只是任何可能包含空格或尾随标点符号的旧类型 ID。或许sizeof
可以用相同的限制来定义,我不确定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)