2011-02-04 52 views
10

Trong C/C++, ý nghĩa sau đây là gì?"for (;;)" có nghĩa là gì?

for(;;){ 
    ... 
} 

Rất tiếc, tôi không thể Google và nhận kết quả có ý nghĩa.

+6

Vòng lặp một mình mãi mãi. – Swiss

+0

Xem thêm http://stackoverflow.com/questions/4031636/what-is-the-for-syntax-in-this-code/4031654#4031654 và http://stackoverflow.com/questions/2737550/what-does -for-mean-in-perl/2737623 # 2737623 - Tôi đã không tính chúng như là lừa đảo vì chúng là PHP/Perl nhưng tôi sẽ ngạc nhiên nếu điều này chưa được hỏi trước đây.Tuy nhiên, kể từ khi tôi không thể tìm thấy một C, bạn đang an toàn cho bây giờ :-) – paxdiablo

+0

Tôi không nghĩ rằng tôi sẽ là người đầu tiên để hỏi, nhưng tôi đã cố gắng tìm kiếm trước khi tôi hỏi. Không có từ khóa để tìm kiếm, và tôi sẽ thừa nhận, tôi là một chút lười biếng. – sas4740

Trả lời

19

Đó là vòng lặp vô hạn, tương đương với while(true). Khi không có điều kiện chấm dứt được cung cấp, điều kiện mặc định là true.

+6

Lý do tại sao người ta viết 'for (;;)' thay vì 'while (true)' là vì một số trình biên dịch sẽ phát hành cảnh báo cho biểu thức boolean không đổi trong 'while (true)'. Ví dụ, Visual C++ cho tôi một "cảnh báo C4127: biểu thức điều kiện là hằng số" với 'while (true)'. –

+3

Nhưng nó hoàn toàn giống nhau về chức năng. –

+1

@Trong silico: Nó cũng có bốn ký tự ngắn hơn, nếu bạn tham gia vào toàn bộ việc chơi gôn. –

5

Lặp lại cho đến khi một số câu hỏi break, exit, throw v.v. bên trong vòng lặp thực thi. Về cơ bản, bạn có thể nghĩ ra một vòng lặp for như bao gồm:

for (setup; test; advance) 
    ... 

Nếu "test" rỗng nó coi là true, và vòng lặp tiếp tục chạy. Rỗng "thiết lập" và "tạm ứng" chỉ đơn giản là không làm gì cả.

5

Trong C và C++ (và một vài ngôn ngữ khác là khá tốt), các for vòng có ba phần:

  • một phần pre-loop, mà thực hiện trước khi vòng lặp bắt đầu;
  • phần điều kiện lặp lại, trong khi đúng, sẽ thực thi phần thân của vòng lặp; và
  • phần sau khi lặp được thực hiện sau mỗi lần lặp của thân vòng lặp.

Ví dụ:

for (i = 1, accum = 0; i <= 10; i++) 
    accum += i; 

sẽ thêm lên những con số từ 1 đến 10, bao gồm.

Nó tương đương như sau:

i = 1; 
accum = 0; 
while (i <= 10) { 
    accum += i; 
    i++; 
} 

Tuy nhiên, không có gì đòi hỏi rằng các phần trong một tuyên bố for thực chứa bất cứ điều gì, và nếu điều kiện lặp là mất tích, nó giả định là đúng.

Vì vậy, các for(;;) vòng lặp về cơ bản chỉ có nghĩa là:

  • không làm bất kỳ thiết lập vòng lặp;
  • lặp mãi mãi (ngắt, trả lại và vv .. bất kể); và
  • không thực hiện bất kỳ quá trình xử lý hậu kỳ nào.

Nói cách khác, đó là vòng lặp vô hạn.

3

Vòng lặp vô hạn tiếp tục cho đến khi có câu lệnh break(), exit() hoặc goto.