c – 在初始化中使用新声明的变量(int x = x 1)?

我偶然发现了令我惊讶的行为:

写作时:

int x = x+1;

在C/C++程序中(或者涉及新创建的变量x的更复杂的表达式),我的gcc / g编译没有错误.在上述情况下,X之后为1.请注意,先前的声明在范围内没有变量x.

所以我想知道这是否是正确的行为(甚至可能在某些情况下有用),或者只是解析器与我的gcc版本或gcc一般的pecularity.

顺便说一句:以下不起作用:

int x++;
用表达式:

int x = x + 1;

变量x在=符号处出现,这就是为什么你可以在右边使用它.通过“存在”,我的意思是变量存在但尚未被初始化部分赋值.

但是,除非您使用静态存储持续时间初始化变量(例如,在函数之外),否则它是未定义的行为,因为存在的x具有任意值.

C 03有这样的说法:

The point of declaration for a name is immediately after its complete declarator (clause 8) and before its initializer (if any) …

Example:
int x = 12;
{ int x = x; }
Here the second x is initialized with its own (indeterminate) value.

第二种情况就是你的问题.

相关文章
相关标签/搜索