Đầu ra của chương trình là gì? #include
Trả lời:
Đáp án đúng: B
Chương trình này có một lỗi biên dịch. Hàm `func` được khai báo là `extern int func(float);` trong hàm `main`, nhưng định nghĩa thực tế của hàm `func` lại nằm sau hàm `main`. Khi trình biên dịch gặp lời gọi `func(3.14)` trong `main`, nó chỉ biết rằng `func` là một hàm trả về `int` và nhận một `float`. Tuy nhiên, khi biên dịch đến định nghĩa của `func`, trình biên dịch có thể phát hiện ra sự không nhất quán (ví dụ: nếu có nhiều định nghĩa cho `func` với các kiểu tham số khác nhau). Trong trường hợp này, dù không có nhiều định nghĩa, việc khai báo `extern` mà không có định nghĩa trước khiến một số trình biên dịch báo lỗi hoặc cảnh báo, đặc biệt khi có sự khác biệt về kiểu dữ liệu hoặc cách thức biên dịch giữa khai báo và định nghĩa. Tuy nhiên, trong trường hợp này, vấn đề chính là thứ tự khai báo và định nghĩa, khiến trình biên dịch không thể xác định chính xác hàm `func` trước khi nó được sử dụng trong `main`. Do đó, chương trình sẽ báo lỗi biên dịch.