使用时,sizeof
我总是将它括在括号中,因为它对我来说更容易阅读,即使有时我可以省略它,在下面的第一种情况下
sizeof unary-expression
sizeof ( type-name )
Run Code Online (Sandbox Code Playgroud)
我的问题是括号如何消除编译器的歧义?什么是这样的例子:
sizeof char
Run Code Online (Sandbox Code Playgroud)
对编译器来说会模棱两可吗?
Eri*_*hil 28
如果允许sizeof
类型名称,则sizeof char * + 3
可以是:
(sizeof (char *)) + 3
,这是char *
添加到3
或(sizeof (char)) * (+ 3)
,这是char
乘以的大小+ 3
。这两个都是有效的解析并且完全由标准定义(除了实现定义的指针大小)。因此,接受sizeof
类型名称会产生语法或语义无法解决的歧义。
如果允许sizeof
类型名称,则sizeof char [x]
可以是(sizeof (char)) [x]
(如果x
是指针或数组,则为有效表达式;下标运算符接受index[array]
)或sizeof (char [x])
(如果x
为整数,则为有效表达式;它是x
元素数组的大小的char
)。此外,语法无法区分这些;两者都是有效的解析。语义规则可以根据 的类型区分它们x
,但是您必须先进行解析,然后才能评估语义规则,并且编译器需要某种方式来撤消解析。
归档时间: |
|
查看次数: |
1242 次 |
最近记录: |