Như @Krishnabhadra đã nêu, tất cả các phản hồi trước đây từ những người dùng khác, đều có cách giải thích chính xác và tôi chỉ muốn phân tích chi tiết hơn về một số điểm.
Trong Old-C như trong ANSI-C, " tham số chính thức chưa được xử lý ", lấy phần nhỏ của thanh ghi công việc hoặc khả năng độ sâu chỉ dẫn (thanh ghi bóng hoặc chu trình tích lũy lệnh), trong MPU 8 bit, sẽ là int16, trong 16 bit MPU và như vậy sẽ là một int16, v.v., trong trường hợp kiến trúc 64 bit có thể chọn biên dịch các tùy chọn như: -m32.
Mặc dù có vẻ đơn giản hơn khi thực hiện ở mức cao, Để vượt qua nhiều tham số, công việc của lập trình viên trong bước loại dữ liệu điều khiển dimencion, trở nên đòi hỏi khắt khe hơn.
Trong các trường hợp khác, đối với một số kiến trúc bộ vi xử lý, trình biên dịch ANSI đã tùy chỉnh, tận dụng một số tính năng cũ này để tối ưu hóa việc sử dụng mã, buộc vị trí của các "tham số chính thức chưa được xử lý" này hoạt động trong hoặc ngoài thanh ghi công việc, hôm nay bạn có được gần như giống nhau với việc sử dụng "dễ bay hơi" và "đăng ký".
Nhưng cần lưu ý rằng các trình biên dịch hiện đại nhất, không phân biệt giữa hai loại khai báo tham số.
Ví dụ về một trình biên dịch với gcc trong linux:
Trong mọi trường hợp, câu lệnh của nguyên mẫu cục bộ không được sử dụng, bởi vì không có cuộc gọi nào mà không có tham số tham chiếu đến nguyên mẫu này sẽ được gửi lại. Nếu bạn sử dụng hệ thống với "tham số chính thức chưa được kiểm tra", đối với cuộc gọi bên ngoài, hãy tiến hành tạo kiểu dữ liệu nguyên mẫu khai báo.
Như thế này:
int myfunc(int param);