【发布时间】:2012-10-29 11:11:12
【问题描述】:
我们知道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)a。 -
@MikkelK.:OP 正在询问标准引号背后的推理,他已经知道标记答案中提到的引号。
-
@Lundin:
sizeof +(int)a比*&具有实际编译的优势 ;-) -
@SteveJessop 嗯,它不是左值。虽然它确实在 Embarcadero C++ 中编译,但很奇怪。无论如何,我相信我们刚刚找到了一元 + 运算符的用途!这一定是 C 编程历史上的第一次 :)
-
@Lundin:你还是要小心一元
+。例如,sizeof +(char)a == sizeof(int)由于整数提升,如果您完全不担心您试图取其大小的表达式,只需放入括号就可能不太容易出错。所以我不确定我是否会称其为“用途”,尽管我承认我确实使用过它......