2012-01-25 27 views
45

Đó là cách chính xác hơn để trở về từ chức năng:Trở về từ một void function

void function() { 
    // blah some code 
} 

HOẶC

void function() { 
    // blah some code 
    return; 
} 

Lý do cho Cách thứ hai:

  1. Nó thể hiện phát triển ý định rõ ràng hơn.
  2. Nó giúp phát hiện chức năng cuối lúc trước biên dịch:

Giả sử bạn có như vậy scenario- bạn có loạt các chức năng, bạn phải tiêm một số mã vào cuối những chức năng. Nhưng vì một số lý do bạn không muốn/hoặc không thể sửa đổi số lượng lớn các chức năng như vậy. Bạn có thể làm gì về điều đó? Return & macro đi vào chơi, ví dụ:

#include<stdio.h> 

#define MAX_LINES 1000 
#define XCAT(a,b) a##b 
#define CAT(a,b) XCAT(a,b) 
#define return returns[__LINE__] = 1;\ 
     if (returns[__LINE__])\ 
      {printf("End of function on %d line.\n",__LINE__);}\ 
     int CAT(tmp,__LINE__); \ 
     if ((CAT(tmp,__LINE__)=returns[__LINE__], returns[__LINE__] = 0, CAT(tmp,__LINE__)))\ 
       return 

static int returns[MAX_LINES]; 


void function1(void) { 
    return; 
} 

void function2(void) { 
    return; 
} 

int main() 
{ 
    function1(); 
    function2(); 

    return 0; 
} 
+3

Câu hỏi thú vị, nhưng đã bỏ phiếu để đóng vì nó quá chủ quan và có thể gây ra xung đột. Có thể tốt hơn cho programmers.stackoverflow.com. Cũng nhớ đọc FAQ. –

+4

Đó là một câu hỏi về phong cách để chèn từ khóa thừa. – stacker

+0

@stacker - những gì là dư thừa cho một tình huống, nó không phải là cho một ... –

Trả lời

48

Không chính xác hơn, vì vậy hãy chọn lựa của bạn. Tuyên bố trống return; được cung cấp để cho phép trả lại trong một chức năng void từ một nơi nào đó không phải là kết thúc. Không có lý do nào khác mà tôi tin.

+1

Chính xác mục đích tôi sẽ sử dụng nó ngay bây giờ;) – nirvanaswap

22

Cách thứ nhất là "chính xác hơn", những gì ý định có thể có được để diễn tả? Nếu mã kết thúc, nó kết thúc. Điều đó khá rõ ràng, theo ý kiến ​​của tôi.

Tôi không hiểu điều gì có thể gây nhầm lẫn và cần làm rõ. Nếu không có cấu trúc vòng lặp nào được sử dụng, thì điều gì có thể xảy ra ngoài chức năng dừng thực thi?

Tôi sẽ cảm thấy khó chịu bởi câu lệnh return bổ sung vô nghĩa vào cuối chức năng void vì nó rõ ràng không phục vụ mục đích và chỉ khiến tôi cảm thấy lập trình ban đầu nói "Tôi đã nhầm lẫn về điều này, và bây giờ bạn có thể quá!" mà không phải là rất tốt đẹp.

48

Lý do duy nhất để có một trở lại trong một hàm khoảng trống sẽ là để thoát sớm do một số tuyên bố có điều kiện ...

void foo(int y) 
{ 
    if(y == 0) return; 

    // do stuff with y 
} 

Như Thư giãn cho biết, khi mã kết thúc, nó kết thúc. Không cần fore một sự trở lại rõ ràng ở cuối.

+0

trình tự ** ** ** nói gì? Sử dụng 'return;' trong hàm 'void' trả về là hợp pháp. – roottraveller

1

Câu hỏi cũ, nhưng tôi vẫn sẽ trả lời. Câu trả lời cho câu hỏi thực tế được hỏi là trả lại tiền thừa là không cần thiết và cần được bỏ qua.

Bên cạnh đó, giá trị đề nghị là sai vì lý do sau đây:

if (ret<0) return; 

Định nghĩa lại một từ dành riêng C như một vĩ mô là một ý tưởng tồi trên mặt của nó, nhưng đề nghị đặc biệt này chỉ đơn giản là unsupportable, cả hai làm đối số và làm mã.

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