Có một tuyên bố goto trong Java?


259

Tôi bối rối về điều này. Hầu hết chúng ta đã được thông báo rằng không có bất kỳ câu lệnh goto nào trong Java.

Nhưng tôi thấy rằng đó là một trong những từ khóa trong Java. nó có thể được sử dụng ở đâu? Nếu nó không thể được sử dụng, thì tại sao nó lại được đưa vào Java như một từ khóa?


13
chỉ là một lời khuyên: không bao giờ sử dụng goto
Lostiniceland

16
Và sau đó có "'Tuyên bố được coi là có hại' được coi là có hại" và "'" Tuyên bố được coi là có hại "Được coi là có hại" Được coi là có hại? " VEEEEERY đệ quy, meme này.
Chris Charabaruk

70
'goto' luôn xấu xa - như trong 'goto work' hoặc 'goto school';)
Andreas Dolk

24
Lý do thực sự là từ "g ** o" được coi là tục tĩu trong hầu hết các ngôn ngữ lập trình. Các nhà thiết kế Java chỉ bảo vệ các lập trình viên trẻ vô tội khỏi những ảnh hưởng xấu. (:-))
Stephen C

25
Cuộc săn phù thủy chống lại goto đã sinh ra một số khoảnh khắc trầm trọng nhất trong cuộc đời tôi. Tôi đã thấy mọi người chống lại mã C bằng cách ẩn chức năng trong các hàm, đặt logic thoát vô lý vào các vòng lặp lồng nhau, và nếu không thì thực hiện mọi hình thức JUST có thể tưởng tượng quá kỹ thuật để tránh ai đó chỉ trích mã của họ trong đánh giá mã. Quy tắc này, cùng với canard "ngươi phải tránh nhiều lợi nhuận", bị chìm trong vô nghĩa. Có những lúc goto làm cho mọi thứ ít bảo trì hơn. Có những lúc goto làm cho mọi thứ dễ bảo trì hơn. Tôi đã rất hy vọng cuộc săn phù thủy này sẽ chết trong thập niên 80.

Câu trả lời:


200

Các danh sách từ khóa Java xác định gototừ khóa, nhưng nó được đánh dấu là "không được sử dụng".

Đó là trong JVM gốc (xem câu trả lời của @VitaliiFedorenko ), nhưng sau đó đã bị xóa. Nó có thể được giữ như một từ khóa dành riêng trong trường hợp nó được thêm vào phiên bản Java sau này.

Nếu gotokhông có trong danh sách và nó sẽ được thêm vào ngôn ngữ sau này, mã hiện có sử dụng từ này gotolàm định danh (tên biến, tên phương thức, v.v ...) sẽ bị hỏng. Nhưng vì gotolà một từ khóa, mã như vậy thậm chí sẽ không biên dịch trong hiện tại và vẫn có thể làm cho nó thực sự làm một cái gì đó sau này, mà không phá vỡ mã hiện có.


29
This was probably done in case it were to be added to a later version of Java.Trên thực tế, lý do chính là một chút khác biệt (xem câu trả lời của tôi dưới đây)
Vitalii Fedorenko

2
Đó là thông tin tốt và thú vị, nhưng nó không giải thích được tại sao nó vẫn là một từ khóa dành riêng.
Thomas

@Thomas Bạn không mô tả lý do tại sao nó dành riêng? Đây là một từ khóa, vì vậy nó không thể được sử dụng ngay bây giờ; sau này goto có thể hồi sinh mà không gây ra vấn đề. Nếu nó không phải là một từ dành riêng, nó có thể được sử dụng ngay bây giờ để tạo mã (int goto = 2;) sẽ bị hỏng nếu goto được giới thiệu.

230

James Gosling đã tạo ra JVM ban đầu với sự hỗ trợ của các gotocâu lệnh, nhưng sau đó anh ta đã loại bỏ tính năng này là không cần thiết. Lý do chính gotolà không cần thiết là thường nó có thể được thay thế bằng các câu lệnh dễ đọc hơn (như break/continue) hoặc bằng cách trích xuất một đoạn mã vào một phương thức.

Nguồn: James Gosling, phiên hỏi đáp


24
"... Hoặc bằng cách trích xuất một đoạn mã thành một phương thức" - điều đó phải thật tuyệt vời nếu không loại bỏ cuộc gọi đuôi thích hợp.
Tên hiển thị

45
Đôi khi, một cách sử dụng khôn ngoan goto cách sẵn sàng và rõ ràng nhất để thể hiện một cái gì đó, do đó, buộc nó vào bất cứ điều gì khác là lực lượng ít đọc hơn .
Ded repeatator

1
@Ded repeatator Cách sử dụng của goto, có thể đúng, có thể luôn bị lỗi.
Çelebi Murat

@Ded repeatator Việc sử dụng goto duy nhất được coi là năng lực tốt trong C ++ được hỗ trợ bởi việc ngắt / tiếp tục.
Mùa đông

2
Goto là một từ khóa dành riêng trong Java là tuyệt vời vì nó ngăn mọi người đặt tên nhãn "goto:".
Mùa đông

147

Các từ khóa tồn tại, nhưng nó không được thực hiện.

Lý do tốt duy nhất để sử dụng goto mà tôi có thể nghĩ đến là:

for (int i = 0; i < MAX_I; i++) {
    for (int j = 0; j < MAX_J; j++) {
        // do stuff
        goto outsideloops; // to break out of both loops
    }
}
outsideloops:

Trong Java, bạn có thể làm như thế này:

loops:
for (int i = 0; i < MAX_I; i++) {
    for (int j = 0; j < MAX_J; j++) {
        // do stuff
        break loops;
    }
}

1
@ Zoltán Không - nó chuyển hướng mã đến nhãn, ngay trước vòng lặp đầu tiên.
assylias

21
@assylias Vâng, không hẳn. Nhãn nhãn vòng lặp bên ngoài. Sau đó, break loopscó nghĩa là "thoát ra khỏi vòng lặp được gọi là loops". Có lẽ khi nhìn lại một cái tên tốt hơn cho nhãn có thể đã được outer.
jonnystoten

8
"Lý do chính đáng duy nhất để sử dụng goto" Các chương trình nhỏ nhanh và bẩn cần một vòng lặp vô hạn vô điều kiện sử dụng goto rất tốt. Sử dụng while (true) {... }là quá mức cần thiết. GOTO thường bị kỳ thị vì sử dụng không đúng cách, nhưng tôi cho rằng những so sánh không cần thiết với chữ boolean còn tệ hơn GOTO.
Alexander - Tái lập Monica

1
Không phải là nhãn vòng lặp sau vòng lặp?
GC_ 17/8/2016

1
Gần đây tôi đã phát hiện ra rằng kỹ thuật ghi nhãn này cũng rất hữu ích khi kết hợp với một continue LABEL;tuyên bố. Vì vậy, bạn có thể tiếp tục một vòng lặp nằm bên ngoài.
infotoni91

43

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html

"Các từ khóa const và goto được bảo lưu, mặc dù chúng hiện không được sử dụng."


12
"Không dấu" thậm chí còn không có! (thở dài)
Matthieu

Có ý nghĩa, vì tất cả các kiểu nguyên thủy trong Java đều được ký.
mwieczorek

1
@mwieczorek Không phải tất cả. "char" là một kiểu nguyên thủy và nó không dấu.
Serge Krivenkov

29

Vì vậy, chúng có thể được sử dụng một ngày nếu các nhà thiết kế ngôn ngữ cảm thấy cần thiết.

Ngoài ra, nếu các lập trình viên từ các ngôn ngữ có các từ khóa này (ví dụ: C, C ++) sử dụng chúng do nhầm lẫn, thì trình biên dịch Java có thể đưa ra một thông báo lỗi hữu ích.

Hoặc có thể đó chỉ là để ngăn chặn các lập trình viên sử dụng goto :)


Chức năng goto bị thiếu trong Java phải đủ lý do để không sử dụng goto - không cần phải đặt trước nó làm từ khóa. Theo logic của bạn, mọi thứ sẽ là một từ khóa, vì nó được sử dụng bởi các ngôn ngữ khác và / hoặc các nhà thiết kế Java COULD sử dụng nó trong tương lai ...
stuXnet

1
Tôi không nghĩ rằng logic của tôi ngụ ý mọi thứ sẽ là một từ khóa. Có một bộ từ khóa nhỏ được sử dụng trên nhiều ngôn ngữ lập trình có thể được phát hiện và xử lý một cách hữu ích trong Java. Java bảo lưu gotoconstphản ánh di sản C / C ++ của họ nhưng chúng vẫn chưa được thực hiện (mặc dù đã có những tranh luận về việc triển khai cái sau). Một vài lượt thích hơn assertenumban đầu không được bảo lưu, nhưng có lẽ nên có, nếu chúng đã được thực hiện. Nhưng nhận thức muộn màng là một điều tuyệt vời.
dave

19

Chúng được dành riêng để sử dụng trong tương lai (xem: Từ khóa ngôn ngữ Java )

Các từ khóa const và goto được bảo lưu, mặc dù chúng hiện không được sử dụng.

Lý do tại sao không có câu lệnh goto trong Java có thể được tìm thấy trong " Môi trường ngôn ngữ Java ":

Java không có câu lệnh goto. Các nghiên cứu minh họa rằng goto là (mis) được sử dụng thường xuyên hơn không chỉ đơn giản là "bởi vì nó ở đó". Loại bỏ goto dẫn đến đơn giản hóa ngôn ngữ - chẳng hạn, không có quy tắc nào về tác động của một goto vào giữa câu lệnh for chẳng hạn. Các nghiên cứu trên khoảng 100.000 dòng mã C đã xác định rằng khoảng 90 phần trăm các câu lệnh goto được sử dụng hoàn toàn để đạt được hiệu quả của việc thoát ra khỏi các vòng lặp lồng nhau. Như đã đề cập ở trên, phá vỡ đa cấp và tiếp tục loại bỏ hầu hết nhu cầu cho các câu lệnh goto.


gotođược bảo lưu, nhưng không sử dụng trong tương lai.
Hầu tước Lorne

17

Một ví dụ về cách sử dụng nhãn "tiếp tục" trong Java là:

public class Label {
    public static void main(String[] args) {
        int temp = 0;
        out: // label
        for (int i = 0; i < 3; ++i) {
            System.out.println("I am here");
            for (int j = 0; j < 20; ++j) {
                if(temp==0) {
                    System.out.println("j: " + j);
                    if (j == 1) {
                        temp = j;
                        continue out; // goto label "out"
                    }
                }
            }
        }
        System.out.println("temp = " + temp);
    }
}

Các kết quả:

I am here // i=0
j: 0
j: 1
I am here // i=1
I am here // i=2
temp = 1

10

Điều quan trọng là phải hiểu rằng gotocấu trúc còn sót lại từ những ngày mà các lập trình viên lập trình bằng mã máy và ngôn ngữ lắp ráp. Bởi vì các ngôn ngữ đó rất cơ bản (như trong, mỗi lệnh chỉ thực hiện một điều), luồng điều khiển chương trình được thực hiện hoàn toàn bằng các gotocâu lệnh (nhưng trong ngôn ngữ lắp ráp, chúng được gọi là các lệnh nhảy hoặc nhánh ).

Bây giờ, mặc dù ngôn ngữ C ở mức độ khá thấp, nó có thể được coi là ngôn ngữ lắp ráp cấp độ rất cao - mỗi câu lệnh và chức năng trong C có thể dễ dàng được chia thành các hướng dẫn ngôn ngữ lắp ráp. Mặc dù C không phải là ngôn ngữ chính để lập trình máy tính ngày nay, nhưng nó vẫn được sử dụng nhiều trong các ứng dụng cấp thấp, chẳng hạn như các hệ thống nhúng. Bởi vì chức năng của C rất phản ánh chức năng của ngôn ngữ lắp ráp, nó chỉ có ý nghĩa rằnggoto được bao gồm trong C.

Rõ ràng rằng Java là một sự phát triển của C / C ++. Java chia sẻ rất nhiều tính năng từ C, nhưng trừu tượng hơn rất nhiều chi tiết và do đó được viết đơn giản khác nhau. Java là một ngôn ngữ cấp cao, do đó, đơn giản là không cần thiết phải có các tính năng cấp thấp như gotokhi các cấu trúc cấp cao hơn như các hàm, cho, và trong khi các vòng lặp thực hiện luồng điều khiển chương trình. Hãy tưởng tượng nếu bạn đang ở trong một chức năng và đã làm mộtgoto một nhãn thành một chức năng khác. Điều gì sẽ xảy ra khi chức năng khác trở lại? Ý tưởng này là vô lý.

Điều này không nhất thiết trả lời tại sao Java bao gồm gotocâu lệnh chưa được biên dịch, nhưng điều quan trọng là phải biết tại sao lại gotođược sử dụng ở nơi đầu tiên, trong các ứng dụng cấp thấp hơn và tại sao nó không có ý nghĩa được sử dụng trong Java.


"luồng điều khiển chương trình được thực hiện hoàn toàn với goto". Vâng, không phải lúc nào cũng goto vô điều kiện.
Peter Mortensen

Việc nhảy với "goto" từ một chức năng vào một nhãn trong một chức năng khác cũng không thể thực hiện được trong C / C ++. Goto trong C / C ++ bị giới hạn trong một khối chức năng duy nhất.
2328447

"Đơn giản là không cần thiết phải có các tính năng cấp thấp như goto khi có nhiều cấu trúc cấp cao hơn" - hãy nhớ "Sự cần thiết và đầy đủ". Nó chỉ là "không cần thiết". Và do đó không có lý do. Lý do là gì: "Goto" như là một thay thế "mức cao" cho JMP, BNE của nhà lắp ráp và hơn thế nữa là hợp lý nếu bạn muốn chuyển sang "mã thực thi" nhưng Java là mã byte và do đó không thể "thực thi được". ;-)
khởi động lại

10

Không, gotokhông được sử dụng, nhưng bạn có thể xác định nhãn và để lại một vòng lặp cho nhãn. Bạn có thể sử dụng breakhoặc continuetheo sau bởi nhãn. Vì vậy, bạn có thể nhảy ra nhiều hơn một cấp độ vòng lặp. Có một cái nhìn vào hướng dẫn .


9

Không, rất may, không có goto trong Java.

Các gototừ khóa được chỉ dành riêng, nhưng không được sử dụng (cùng đi cho const).


Tôi có thể biết những gì dành riêng có nghĩa ở đây? Nếu sử dụng goto và const trong mã không phải là một cách thực hành tốt, tại sao họ lại bảo lưu nó? Bạn có thể giải thích dùm không?
Gopi

@Sri Kumar: xem câu trả lời của @ applechewer, nó tồn tại nhưng nó không được thực hiện.
Valentin Rocher

1
@Sri Kumar: Các từ khóa dành riêng ngăn chúng không được sử dụng làm tên biến hoặc tương tự. Theo cách này, các từ khóa này có thể được triển khai trong các phiên bản Java trong tương lai mà không phá vỡ mã nguồn cũ có thể sử dụng chúng theo cách khác.
Peter Di Cecco

8

Bởi vì nó không được hỗ trợ và tại sao bạn lại muốn một gototừ khóa không có gì hoặc một biến có tên goto?

Mặc dù bạn có thể sử dụng break label;continue label;tuyên bố để làm hiệu quả những gì goto. Nhưng tôi sẽ không đề nghị nó.

public static void main(String [] args) {

     boolean t = true;

     first: {
        second: {
           third: {
               System.out.println("Before the break");

               if (t) {
                  break second;
               }

               System.out.println("Not executed");
           }

           System.out.println("Not executed - end of second block");
        }

        System.out.println("End of third block");
     }
}

10
-1 Tại sao tôi không được phép có một biến hoặc phương thức có tên goto?
Michael Borgwardt

4
Bởi vì nó có ý nghĩa trong vùng đất lập trình không áp dụng được với Java. Đó cũng là một lựa chọn nghèo nàn của tên biến.
pjp

Một biến 'in' sẽ được sử dụng để làm gì? Các từ mà bạn đã đề cập giống như tên phương thức hơn là biến hoặc từ khóa.
pjp

3
-1: Trước hết, chỉ vì Java không hỗ trợ câu lệnh kiểm soát luồng "goto", không có nghĩa đó là lý do nó có từ khóa "goto" mà không làm gì cả. Thứ hai, "goto" có thể là một tên biến kém, nhưng nó có thể là một tên phương thức tuyệt vời, mà chúng ta không thể sử dụng vì "goto" là một từ khóa. Thứ ba, "phá vỡ nhãn" và "tiếp tục nhãn" tồn tại vì một lý do rất tốt, vì vậy "không khuyến nghị" không hữu ích lắm. Và thứ tư, vì Sun nói rằng nó "hiện không được sử dụng", rất có thể có nghĩa là họ đã từng lên kế hoạch thực hiện, nhưng không muốn loại bỏ từ khóa khi họ quyết định khác.
Vojislav Stojkovic

2
@VojislavStojkovic Đó chỉ là một cuộc nói chuyện điên rồ. 1) Đó lý do tại sao nó không làm gì là vì nó không hỗ trợ nó. Theo JLS The keywords const and goto are reserved, even though they are not currently used. This may allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in programs.Điều này có nghĩa là "Chúng tôi không sử dụng nó, vì vậy nếu bạn đến từ nền C ++, chúng tôi sẽ không cho phép bạn sử dụng nó." 2) gotolà một tên phương thức khủng khiếp. Lấy làm tiếc. 3) phá vỡ và tiếp tục được khuyến nghị, nhưng không phải theo cách được sử dụng ở đây . 4) "rất có thể" [cần dẫn nguồn].
corsiKa

7

Không, gotokhông được sử dụng trong Java, mặc dù là một từ dành riêng. Điều này cũng đúng với const. Cả hai thứ này đều được sử dụng trong C ++, đây có lẽ là lý do khiến chúng được bảo lưu; ý định có lẽ là để tránh các lập trình viên C ++ nhầm lẫn di chuyển sang Java và có lẽ cũng để giữ tùy chọn sử dụng chúng trong các phiên bản sau của Java.


1
Tôi thực sự hy vọng gotokhông được hỗ trợ trong tương lai gần ít nhất;)
Bozho

6
@Bozho: tốt, nó có thể được sử dụng cho một số tính năng mới khéo léo hoàn toàn không liên quan gì đến goto cũ "có hại".
Michael Borgwardt

3

Lưu ý rằng bạn có thể thay thế hầu hết các cách sử dụng goto lành tính bằng

  • trở về

  • phá vỡ

  • phá vỡ nhãn

  • ném vào bên trong thử


5
Không bao giờ nên sử dụng ngoại lệ để kiểm soát luồng
ChssPly76

13
Các ngoại lệ được sử dụng để kiểm soát dòng chảy, nhưng chỉ nên được sử dụng cho các trường hợp ngoại lệ. Ví dụ, một trong những cách sử dụng goto trong C là xử lý lỗi, đặc biệt nếu liên quan đến việc dọn dẹp.
starblue

2
@starblue, bạn lấy từ ngữ ra khỏi miệng tôi. Ném một ngoại lệ kiểm soát dòng chảy. Trong C, trên thực tế, bạn có thể thực hiện một cách rõ ràng việc xử lý ngoại lệ thông qua setjmp / longjmp bằng cách đảm bảo rằng bạn đặt setjmp trước cho mã xử lý và thực thi longjmp () cho nó ngoại lệ.

Tôi muốn làm một kiểm tra nếu và bỏ qua một nửa phương thức nếu đúng. Không đi đến tôi phải sử dụng một người khổng lồ khác. IMO nó khá là xấu xí vì quá nhiều phép ghép tạo ra sự nhầm lẫn
WVrock

1
@WVrock Bạn có thể thửreturn
Andrew Lazarus

2

Như đã chỉ ra, không có gototrong Java, nhưng từ khóa được dành riêng trong trường hợp Sun cảm thấy muốn thêm gotovào Java một ngày nào đó. Họ muốn có thể thêm nó mà không phá vỡ quá nhiều mã, vì vậy họ bảo lưu từ khóa. Lưu ý rằng với Java 5 họ đã thêmenum từ khóa và nó cũng không phá vỡ nhiều mã đó.

Mặc dù Java không có goto, nhưng nó có một số cấu trúc tương ứng với một số cách sử dụng goto, cụ thể là có thể breakcontinuevới các vòng lặp được đặt tên. Ngoài ra, finallycó thể được coi là một loại xoắn goto.


1

Để cấm khai báo các biến có cùng tên.

ví dụ int i = 0, goto;


3
Nhưng tại sao ? Tại sao chúng ta không được phép đưa ra những tuyên bố này?
Tiếp

1

Nó rất được coi là một trong những điều bạn không làm, nhưng có lẽ được liệt kê như một từ dành riêng để tránh nhầm lẫn cho các nhà phát triển.


1

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto

Nếu bạn được thông báo rằng không có câu lệnh goto nào trong Java thì bạn đã bị lừa. Thật vậy, Java bao gồm hai lớp mã 'nguồn'.


5
điều đó giống như nói rằng bất kỳ ngôn ngữ nào cũng có một goto bởi vì tồn tại một nhánh vô điều kiện trong mã lắp ráp bên dưới tất cả. Có goto trong mã byte không có nghĩa là có goto trong java vì "trong java" có nghĩa là "Trong ngôn ngữ java" và mã byte không phải là một lớp nguồn.

@ tgm1024, "trong Java" cũng có thể được hiểu là "trong nền tảng Java". Trình biên dịch Java cần tạo ra mã byte Java hoặc đầu ra sẽ không hoạt động trong JVM nền tảng Java. C ++, chẳng hạn, không chỉ định đầu ra biên dịch và trình biên dịch có thể tự do sản xuất bất kỳ dạng mã máy nào (hoặc bất kỳ mã nào khác). Ứng dụng được lập trình bằng mã Java có thể được gọi là "ứng dụng Java" nhưng ứng dụng được lập trình mã máy không thể được gọi là "ứng dụng C ++".
Mikael Lindlöf 7/2/2015

2
Tôi biết đầy đủ java bytecode là gì. Tôi đã mã hóa lần đầu tiên trong java vào năm 1996. Và bạn có thể có các ngôn ngữ khác tạo mã byte java cho JVM. Trường hợp tôi đang sửa lỗi cho bạn là ý tưởng này có hai lớp nguồn. Không có. Bạn có nguồn java và điều này được biên dịch thành mã byte java (được thực thi bởi JVM) và đây không phải là một lớp nguồn bổ sung. Chỉ vì có một "goto" trong mã byte không có nghĩa là có "goto" trong java. Java đã đặt tên ngắt và đặt tên tiếp tục, nhưng không có goto.

@ tgm1024 Tôi bị đánh thức bởi một downvote :) Có thể dễ dàng thấy rằng tôi đã mất lập luận kể từ khi bạn đưa ra nhận xét cuối cùng và thông tin đăng nhập của bạn rất ấn tượng. Quan điểm của tôi, mà tôi đang xây dựng, là rất có thể lập trình với mã byte Java. Để đảm bảo với bạn, đây thậm chí là một câu hỏi về điều đó: stackoverflow.com/questions/3150254/
Khăn


1

Tôi không phải là fan hâm mộ của goto , vì nó thường làm cho mã ít đọc hơn. Tuy nhiên, tôi tin rằng có những ngoại lệ đối với quy tắc đó (đặc biệt là khi nói đến từ vựng và trình phân tích cú pháp!)

Tất nhiên, bạn luôn có thể đưa chương trình của mình vào Kleene Normalform bằng cách dịch nó sang một cái gì đó giống như trình biên dịch và sau đó viết một cái gì đó như

int line = 1;
boolean running = true;
while(running)
{
    switch(line++)
    {
        case 1: /* line 1 */
                break;
        case 2: /* line 2 */
                break;
        ...
        case 42: line = 1337; // goto 1337
                break;
        ...
        default: running = false;
                break;
    }
}

(Vì vậy, về cơ bản bạn viết một VM thực thi mã nhị phân của bạn ... trong đó line tương ứng với con trỏ lệnh)

Điều đó dễ đọc hơn nhiều so với mã sử dụng goto, phải không?


Câu hỏi tiếp theo, "Có câu lệnh chuyển đổi nào trong Python không"
Mark K Cowan

0

Tất nhiên đó là từ khóa, nhưng nó không được sử dụng ở cấp độ mã nguồn.

Nhưng nếu bạn sử dụng jasmin hoặc ngôn ngữ cấp thấp khác, được chuyển đổi thành mã byte, thì "goto" sẽ ở đó


-1

Bởi vì mặc dù ngôn ngữ Java không sử dụng nó, nhưng mã byte JVM cũng vậy.


7
Vậy thì tại sao ngôn ngữ không có loadtừ khóa?
Tiếp

3
@gribnit, có một goto trong mã byte không tự nó có nghĩa là bất cứ điều gì cho các từ dành riêng cấp trên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.