在 GNUC C 中,您可以使用typeof(expression)
,并且使用内部带有副作用的表达式是合法的。例如,您可以使用以下 C 代码:
int x = 0;
typeof(x++) y;
在这种情况下,副作用被忽略,并且 x 之后仍然为零(这是有道理的,因为类型只是编译时的事情)。
但是,那海湾合作委员会文档 http://gcc.gnu.org/onlinedocs/gcc/Typeof.html says:
评估 typeof 操作数的副作用
当且仅当它是可变修饰类型的表达式
或此类类型的名称。
这句话是什么意思呢?真的可以写吗typeof
有副作用并且副作用实际上在运行时执行吗?对我来说,这句话似乎就表明了这一点。
是的,在某些情况下可能会产生副作用typeof
评价。正如文档所述,它需要位于“可变修改类型”内。这是一种依赖于某些运行时值的类型,例如int[x]
.
所以下面的代码是合法的,声明 y 的类型int[1]
,之后 x 的值为 1:
int x = 0;
typeof(int[++x]) y;
当然,与一般的可变修改类型一样,这仅对于局部变量声明(函数内部)是合法的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)