C2x,6.5.3.4 sizeof 和 _Alignof 运算符,语义,2(已添加重点):
如果操作数的类型是变长数组类型,则计算操作数;否则,不计算操作数,结果是一个整数常量。
C2x,6.7.6.2 数组声明符,语义,5(强调):
如果大小表达式是运算符操作数的一部分,则不计算
_Alignof
该表达式。
考虑这段代码:
int f(void)
{
return _Alignof( int(*)[ f() ] );
}
问:应该f()
叫什么?
根据 6.5.3.4,操作数的类型是可变长度数组类型 => 计算操作数。
根据 6.7.6.2,大小表达式是_Alignof
运算符 => 不计算该表达式的操作数的一部分。
标准有矛盾吗?
如果不是,那么是否意味着 6.7.6.2 的优先级高于 6.5.3.4?