2013-06-28 55 views
10

Làm thế nào tôi có thể sử dụng chức năng goto qua chức năng khác nhau .Đối với ex,Sử dụng chức năng Chuyển qua chức năng khác nhau

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

    void function() 
    { 
    goto REACH ; 
    } 

Làm thế nào để thực hiện việc sử dụng như vậy?

+3

Bạn không nên sử dụng goto http://xkcd.com/292/ –

+2

Hãy thử 'setjmp' để thay thế. – UltimaWeapon

+3

Câu hỏi: Tại sao bạn muốn làm điều này? Chắc chắn có những cách tốt hơn. – michaelb958

Trả lời

12

Bạn không thể ở Chuẩn C; nhãn là cục bộ cho một hàm duy nhất.

Tương đương chuẩn gần nhất là setjmp()longjmp() cặp chức năng.

GCC có extensions để hỗ trợ nhãn nói chung hơn.

12

Bạn không thể sử dụng Standard C++. Từ $ 6.6.4/1 của Tiêu chuẩn Ngôn ngữ C++

Lệnh goto chuyển điều khiển vô điều kiện sang câu lệnh được nhận dạng bởi mã định danh. Mã định danh phải là nhãn (6.1) nằm trong hàm hiện tại.

... hoặc trong tiêu chuẩn C. Từ $ 6.8.6.1/1 của C Ngôn ngữ chuẩn

Từ định trong một tuyên bố goto sẽ đặt tên cho một nhãn nằm đâu đó trong kèm theo chức năng. Câu lệnh goto sẽ không nhảy từ bên ngoài phạm vi của số nhận dạng có một loại được sửa đổi khác nhau vào bên trong phạm vi của từ định danh đó.

2

Đối với gcc:

#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); 
    } 
} 

Lưu ý rằng đây có thể là một hành vi undefined

Các vấn đề liên quan