2010-04-09 41 views
10

một số lần tôi thấy rằng các chức năng được định nghĩa như sau:Tại sao các loại tham số được khai báo bên ngoài dấu ngoặc đơn?

read_dir(dir) 
char *dir; 
{ 
     DIR * dirp; 
     struct dirent *d; 

     /* open directory */ 
     dirp = opendir(dir); 
    ......... so on 

đây tầm quan trọng của báo cáo kết quả

char *dir; 

là những gì những gì là tăng thêm đằng sau tuyên bố con trỏ ngay sau tên hàm và sau đó bắt đầu thân hàm.

Trả lời

12

Đó là cú pháp C cũ hơn, bị bỏ qua "K&R C" vì đó là cách xuất hiện trong phiên bản gốc của legendary book.

gì thường được viết như thế này:

foo(a, b) 
int a; 
int b; 
{ 
} 

tại là

int foo(int a, int b) 
{ 
} 
8

Nó chỉ là "kiểu cũ", K&R C chức năng định nghĩa (xem Kernighan & Ritchie's book, thường được gọi một cách đơn giản Kernighan & Ritchie.)

Mã bạn tham khảo có thể đã được viết vào cuối những năm tám mươi, hoặc đầu những năm chín mươi với tính di động (tức là khả năng tương thích với các trình biên dịch cũ hơn, có thể trên nhiều nền tảng "kỳ lạ") trong tâm trí.

Ngay cả sau khi công bố tiêu chuẩn 1989 C, trong nhiều năm K & RC vẫn coi là "mẫu số chung nhỏ nhất" mà các lập trình viên C hạn chế bản thân khi di động tối đa được mong muốn, vì nhiều trình biên dịch cũ vẫn còn ở sử dụng, và bởi vì cẩn thận bằng văn bản K & Mã RC có thể là hợp pháp Tiêu chuẩn C là tốt.

Một số người có thể tin rằng K & R-style định nghĩa hàm, vẫn được hỗ trợ bởi trình biên dịch, có thể đọc nhiều hơn, đó là trong thực tế không hẳn đã đúng; so sánh:

some_function(param1,param2,param3) 
char *param1; /* param1 comment */ 
int  param2; /* param2 comment */ 
short param3; /* param3 comment */ 
{ 
} 

với

/* notice also that return type is explicitly specified now */ 
int 
some_function(
    char *param1, /* param1 comment */ 
    int  param2, /* param2 comment */ 
    short param3 /* param3 comment */ 
) 
{ 
} 

K & định nghĩa chức năng R-style đã lỗi thời từ năm 1989; xem phần 6.9.5 "Định nghĩa chức năng" trong tiêu chuẩn C90.

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