3 回答
TA贡献1786条经验 获得超13个赞
1 2 3 4 5 | if(ibex > 14) sheds = 3; else sheds = 2; help = 2 * sheds; |
与
1 2 3 4 5 6 7 8 | if(ibex > 14) { sheds = 3; help = 2 * sheds; } else sheds = 2; help = 2 * sheds; |
有区别吗?这2个是没有任何区别的。
在你看来,区别是help = 2 * sheds;这句话的地方,但是,你发现了没有,无论是上面的一个,还是下面的一个。不管if语句成立或者不成立,help = 2 * sheds;这句语句都是会执行的。所以,虽然在写法上有一点区别,但是结果确实完全是一样的。
这也是一种简洁程序的一种思路,你现在有可能体会不到,等你以后编写多了,你就能体会到这种简洁的思路了。
TA贡献1893条经验 获得超10个赞
标签本身没有作用域的,只是一个标志点。
但是goto本身有限制,只能是当前函数。所以,从这个角度来说,标签的作用域也可以说是当前函数。
比如
1 2 3 4 5 6 7 8 9 | void func() { int a; a=0; loop: a++; if(a<10) goto loop; printf("%d",a); } |
这个程序中,loop标签就与goto配合起到了跳转作用。
对于goto来说,这个标签只要是在本函数内的就是合法的,无论是在goto前还是goto后。
但是,如下程序:
1 2 3 4 5 6 7 8 9 10 11 12 | int a = 0; void func1(void) { loop: printf("%d",a); }
void func2(void) { a++; if(a<10)goto loop; } |
在func2中调用goto使用了func1中的标签loop,在编译的时候就会报错。因为使用goto时只会在本函数中查找该标签。
TA贡献1818条经验 获得超7个赞
(1) if(size > 12) goto a;
goto b;
a: cost = cost * 1.05
flag = 2;
b: bill = cost * flag;
等效于:
if (size >12) {
a: cost = cost * 1.05
flag = 2;
b: bill = cost * flag;
} else {
b: bill = cost * flag;
};
==========
(2) if(ibex > 14) goto a;
sheds = 2;
goto b;
a: sheds = 3;
b: help = 2 * sheds;
等效于:
if(ibex > 14) {
a: sheds = 3;
b: help = 2 * sheds;
} else {
sheds = 2;
b: help = 2 * sheds;
};
========
goto 语句用于本函数范围。
goto 语句 可以在本域内 转向。
goto 语句 可从本域转 本域的外层域。
goto 语句 不可从本域转 本域的内层域。
- 3 回答
- 0 关注
- 1026 浏览
添加回答
举报