在GNUC C中,您可以使用typeof(expression),并且使用内部具有副作用的表达式是合法的.例如,你可以拥有这个C代码:
int x = 0;
typeof(x++) y;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,副作用被忽略,之后x仍然为零(这是有道理的,因为类型只是编译时的事情).
但是,海湾合作委员会的文件说:
当且仅当它是可变修改类型的表达式或这种类型的名称时,才评估typeof的操作数的副作用.
这句话是什么意思?是否真的可以typeof用副作用编写,并且副作用实际上是在运行时执行的?对我来说,这句话似乎表明了这一点.
是的,在某些情况下,可能会在typeof评估中产生副作用.正如文档所说,它需要在"可变修改类型"内.这是一种取决于某些运行时值的类型,例如int[x].
所以下面的代码是合法的,声明y是类型的int[1],然后x的值为1:
int x = 0;
typeof(int[++x]) y;
Run Code Online (Sandbox Code Playgroud)
当然,对于一般的可变修改类型,这仅对局部变量声明(内部函数)是合法的.