Trước tiêu chuẩn ANSI C 1989, C không có nguyên mẫu (khai báo hàm xác định loại tham số); những tuyên bố và định nghĩa kiểu cũ này đều có sẵn.
Năm 1989, tiêu chuẩn ANSI C (về cơ bản đã trở thành tiêu chuẩn ISO C 1990) đã giới thiệu các nguyên mẫu. Nếu tôi nhớ chính xác, ý tưởng thực sự đến từ C++ (mà chưa được chuẩn hóa vào thời điểm đó). Các khai báo và định nghĩa kiểu cũ vẫn hợp pháp, do đó mã cũ vẫn có thể được biên dịch. Tiêu chuẩn năm 1989 cũng cho rằng các tuyên bố kiểu cũ là "lỗi thời", có nghĩa là chúng có thể được loại bỏ trong một phiên bản tương lai của tiêu chuẩn.
Tiêu chuẩn ISO C 1999, (chính thức) thay thế tiêu chuẩn năm 1990, để lại điều này một mình; các khai báo và định nghĩa kiểu cũ vẫn hợp pháp, và tất cả các trình biên dịch phù hợp đều phải hỗ trợ chúng (mặc dù chúng được tự do cảnh báo về chúng, vì chúng có thể cảnh báo về bất kỳ thứ gì khác).
Kể từ latest C201X draft (PDF lớn), vẫn còn này không thay đổi. Các khai báo và định nghĩa hàm kiểu cũ vẫn là một phần bắt buộc của ngôn ngữ và tất cả các trình biên dịch phù hợp phải hỗ trợ chúng. (Cá nhân, tôi cho rằng điều này không may.)
C++, mặt khác, chưa bao giờ (?) Hỗ trợ bất cứ điều gì ngoài nguyên mẫu như khai báo hàm; Stroustrup không quan tâm đến việc duy trì khả năng tương thích với mã C cũ.
Nhưng trừ khi bạn cần duy trì mã cũ và/hoặc sử dụng các trình biên dịch rất cũ, không có lý do chính đáng để sử dụng các khai báo hoặc định nghĩa hàm kiểu cũ.
Lưu ý rằng, ít nhất là trong C, định nghĩa này:
int main() {
/* ... */
}
thực sự là một định nghĩa kiểu cũ. Đó là chính xác cho C++, nơi đó là một nguyên mẫu cho thấy main
không có tham số, nhưng trong C nó phải được
int main(void) {
/* ... */
}
(C++ cũng chấp nhận hình thức này để tương thích với C - nhưng do thời gian bạn đang viết main
, bạn nên đã quyết định ngôn ngữ nào bạn đang sử dụng.)
Bạn không nên tự ý biên dịch mã C thành C++. Nếu bạn cần sử dụng nó với mã C++, bạn có thể liên kết mã với nhau và báo cho mã C++ của bạn sử dụng C-linkage ('extern" C "'). – jamesdlin
Tôi nhớ lần đầu tiên nhìn thấy cú pháp này, khoảng năm 1982. Tôi nghĩ đó là đầu gối của con ong! (Sau FORTRAN, rất nhiều thứ trông giống như đầu gối của ong.) – TonyK