2 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊
標(biāo)簽本身沒有作用域的,只是一個(gè)標(biāo)志點(diǎn)。
但是goto本身有限制,只能是當(dāng)前函數(shù)。所以,從這個(gè)角度來說,標(biāo)簽的作用域也可以說是當(dāng)前函數(shù)。
比如
void func() { int a; a=0; loop: a++; if (a<10) goto loop; printf ( "%d" ,a); } |
這個(gè)程序中,loop標(biāo)簽就與goto配合起到了跳轉(zhuǎn)作用。
對于goto來說,這個(gè)標(biāo)簽只要是在本函數(shù)內(nèi)的就是合法的,無論是在goto前還是goto后。
但是,如下程序:
int a = 0; void func1( void ) { loop: printf ( "%d" ,a); } void func2( void ) { a++; if (a<10) goto loop; } |
在func2中調(diào)用goto使用了func1中的標(biāo)簽loop,在編譯的時(shí)候就會報(bào)錯(cuò)。因?yàn)槭褂胓oto時(shí)只會在本函數(shù)中查找該標(biāo)簽。

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊
if (ibex > 14) sheds = 3; else sheds = 2; help = 2 * sheds; |
與
有區(qū)別嗎?這2個(gè)是沒有任何區(qū)別的。
在你看來,區(qū)別是help = 2 * sheds;這句話的地方,但是,你發(fā)現(xiàn)了沒有,無論是上面的一個(gè),還是下面的一個(gè)。不管if語句成立或者不成立,help = 2 * sheds;這句語句都是會執(zhí)行的。所以,雖然在寫法上有一點(diǎn)區(qū)別,但是結(jié)果確實(shí)完全是一樣的。
這也是一種簡潔程序的一種思路,你現(xiàn)在有可能體會不到,等你以后編寫多了,你就能體會到這種簡潔的思路了。
添加回答
舉報(bào)