【发布时间】:2016-11-13 04:38:07
【问题描述】:
我有以下代码:
int X = 1;
if (int X = X)
{
printf("%d\n", X);
if (int X = X)
{
printf("%d\n", X);
}
}
我的期望是 X 应该是 1, 1。但是,输出是:
1818935350
32767
有人知道这里发生了什么吗?使用 clang-800.0.42.1 编译
编辑:我尝试了以下代码并稍作调整,现在它的行为符合我的预期。
int X = 1;
if (int Y = X)
{
printf("%d\n", Y);
if (int Z = X)
{
printf("%d\n", Z);
}
}
一种猜测是,当您在 if 语句内的声明的 RHS 上使用变量时,它可能不是指在父范围内声明的同名变量,而是指正在定义的变量...
【问题讨论】:
-
去掉 if 语句中 X 之前的 'int'。此外,如果您想进行比较,您需要使用
==而不是=。=设置 X 的值。但是,很难在这里看到您要完成的工作。也许给一些想要的输入和输出 -
@bpgeck 这不是我打算做的。我想检查在 if 语句中使用声明时的行为。
-
@Avi Berger 是的,我知道,但不管你信不信。我遇到了一个与此类似的问题。我需要一些将扩展为 if 语句的宏,并且我希望它们自动引用父范围内具有相同名称的宏......似乎这是不可能的。
-
@ShafikYaghmour 不错的参考资料,以前不知道 :)