使用时,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 次 |
| 最近记录: |