Định nghĩa chức năng ở dạng không phải mẫu thử nghiệm là mã C89, C99 và C11 hợp lệ.
Nó được gọi là định nghĩa hàm kiểu cũ nhưng tính năng này được đánh dấu vì C89 là một tính năng lỗi thời.
Biểu mẫu này phải là không phải được sử dụng trong các chương trình mới.
C99 Lý nói:
"đặc trưng cho phong cách cũ như dùng nưa là có nghĩa là để ngăn cản việc sử dụng nó và để phục vụ như một sự chứng thực mạnh do Ủy ban của phong cách mới."
thậm chí K & R2 không khuyến khích việc sử dụng nó:
"Các phong cách cũ của khai báo và định nghĩa vẫn hoạt động với ANSI C, ít nhất là cho một giai đoạn chuyển tiếp, nhưng chúng tôi khuyên bạn nên sử dụng mới khi bạn có một trình biên dịch hỗ trợ nó. "
Hiện tại, hàm của bạn cũng không có kiểu trả về và bỏ kiểu trả về trong khai báo hàm hoặc định nghĩa hàm không còn giá trị kể từ C99. Trước C99, các hàm không có kiểu trả về hoàn toàn trả về một số int
.
Về câu hỏi gcc
, theo mặc định gcc
biên dịch với -std=gnu89
. Nó có nghĩa là C89 Standard + gcc mở rộng. Vì vậy, theo mặc định gcc
sẽ chấp nhận để biên dịch một chương trình có khai báo hàm và định nghĩa theo dạng cũ của chúng và không có kiểu trả về.
Cú pháp này đã cũ ngay cả năm 1993 :) – dasblinkenlight
Tôi nghĩ rằng trình biên dịch đi kèm với HP-UX chỉ hỗ trợ tính năng này ngay cả trên các hệ thống hiện đại.Trình biên dịch ANSI C tốn thêm tiền. Vì vậy, nếu bạn cần phải biên dịch một chương trình C rất đơn giản, biết cú pháp này thực sự có thể hữu ích. –
Năm 1993, việc sử dụng cú pháp cũ đó là không hợp lý; vẫn có những cỗ máy mà các trình biên dịch gốc không hỗ trợ chuẩn C. Không nhiều, nhưng có một số. Mãi cho đến những năm 90 sau đó (năm 1996 trở đi) các nguyên mẫu là đủ phổ biến để có thể sử dụng tự động. Gần biên giới, nhưng vào năm 1993, vẫn còn chính đáng (mặc dù cần phải có một làm rõ một nơi nào đó trong cuốn sách). –