Có sự khác biệt nào giữa các khai báo sau không? extern int fun( ) ; int fun( );
Đáp án đúng: B
Trong C/C++, khai báo extern int fun(); cho biết rằng hàm fun được định nghĩa ở một đơn vị biên dịch khác (tệp nguồn khác). Nó báo cho trình biên dịch biết rằng hàm này tồn tại và sẽ được liên kết sau. Khai báo int fun(); (không có extern) có thể là một khai báo hàm, hoặc một định nghĩa hàm (nếu có thân hàm đi kèm). Nếu nó xuất hiện bên ngoài bất kỳ hàm nào, nó được coi là một khai báo "external linkage" (liên kết ngoài) theo mặc định, tương tự như khai báo với extern. Tuy nhiên, nếu nó xuất hiện bên trong một hàm, nó là một khai báo hàm.
Do đó, sự khác biệt chính là extern đảm bảo rằng hàm được định nghĩa ở một nơi khác. Nếu không có extern, trình biên dịch có thể hiểu nó như một khai báo hoặc một định nghĩa tạm thời trong cùng đơn vị biên dịch.
Vậy đáp án B là chính xác nhất.





