【发布时间】:2016-05-30 03:42:04
【问题描述】:
我对@987654321@有一些疑问。这是我的代码:
int main(){
int a = 1;
if (a<0)
goto out;
out:
printf("out");
return 1;
}
问题是,无论 a 的值是什么(例如:a=-1 或 a=0),out 可以打印。
谁能告诉我原因,非常感谢。
【问题讨论】:
-
因为代码中没有任何内容会导致
printf行被跳过。goto什么都不做,因为它只会导致下一行被执行——无论goto是否运行,都会发生这种情况。 -
我不明白这个问题的动机,除非 OP 对条件执行或签名比较感到困惑。无论您将
a设置为什么值,您最终都会得到out:标签。如果out:出现在printf("out")之后,您可能会根据(a)的值获得不同的程序行为... -
有两种情况,对吧? (1) 如果
a<0则执行goto并将控制转移到out标签,并打印out。 (2) 如果a >= 0则跳过goto,并将控制传递到if语句之后的第一条语句。但这只是带有out标签的语句,并且将再次打印out。没有通过函数的路径可以避免它。这有多令人困惑? -
如果我是一个可疑的人,我会说这个问题是投票环或傀儡食物。
-
这不是使用
goto的场景,因为printf()正在执行某某,有或没有你的goto。 (-: