8

在 GNUC C 中,您可以使用typeof(expression),并且在内部使用带有副作用的表达式是合法的。因此,例如,您可以使用以下 C 代码:

int x = 0;
typeof(x++) y;

在这种情况下,副作用被忽略,之后 x 仍然为零(这是有道理的,因为类型是仅编译时的东西)。

但是,GCC 文档说:

当且仅当 typeof 的操作数是可变修改类型的表达式或此类类型的名称时,才评估其副作用。

这句话是什么意思?真的有可能写typeof一个副作用并让副作用在运行时实际执行吗?对我来说,这句话似乎表明了这一点。

4

1 回答 1

9

typeof是的,在某些情况下,可能会在内部评估副作用。正如文档所说,它需要在“可变修改类型”内。这是一种依赖于一些运行时值的类型,例如int[x].

所以下面的代码是合法的,将 y 声明为 type int[1],然后 x 的值为 1:

int x = 0;
typeof(int[++x]) y;

当然,对于一般的可变修改类型,这仅对局部变量声明(函数内部)是合法的。

于 2012-07-16T12:47:29.840 回答