2013-06-28 59 views
10

轉到功能如何使用在不同的功能。對於前跳轉功能,使用在不同的功能

main() 
    { 
     .... 
     REACH: 
     ...... 
    } 

    void function() 
    { 
    goto REACH ; 
    } 

如何實現這樣的用法?

+3

你不應該使用轉到http://xkcd.com/292/ –

+2

嘗試來'setjmp'代替。 – UltimaWeapon

+3

問:你爲什麼要這樣做?當然有更好的方法。 – michaelb958

回答

12

你不能在標準C;標籤對於單個功能來說是本地的。

最接近的標準等價物是setjmp()longjmp()一對函數。

GCC具有extensions以更一般地支持​​標籤。

12

你不能在標準C++。從C++語言標準的$ 6.6.4/1開始

goto語句無條件地將控制轉移到由標識符標記的語句。標識符應爲位於當前函數中的標籤(6.1)。

...或標準C.從$ 6.8.6.1/1 goto語句應命名位於封閉 功能某處標記了C語言的標準

的標識符。 goto語句不得從具有可變修改類型的標識符的範圍之外跳轉到該標識符的範圍內。

2

海合會:

#include <iostream> 

void func(void* target){ 
    std::cout << "func" <<std::endl; 
    goto *target; 
} 


int main() { 
    void* target; 
    auto flag = true; 
l: 
    std::cout << "label" <<std::endl; 
    target = &&l; 
    if (flag) { 
     flag = false; 
     func(target); 
    } 
} 

請注意,這可能是一個未定義的行爲