JavaScript is required

Is there any difference between following declarations?
Media VietJack

A.
Both are identical
B.
No difference, except extern int fun( ); is probably in another file
C.
int fun( ); is overrided with extern int fun( );
D.
None of these
Trả lời:

Đáp án đúng: A


Trong C/C++, khai báo `int fun();` là một *khai báo hàm* (function declaration) thông báo cho trình biên dịch rằng có một hàm tên là `fun` trả về một giá trị kiểu `int` và không có tham số nào được chỉ định. Nó không định nghĩa hàm, chỉ cho biết hàm tồn tại. Nếu không có khai báo này, trình biên dịch có thể báo lỗi nếu hàm `fun` được gọi trước khi nó được định nghĩa. `extern int fun();` cũng là một *khai báo hàm*. Từ khóa `extern` chỉ ra rằng hàm `fun` được định nghĩa ở một nơi khác (có thể là trong một file mã nguồn khác hoặc một thư viện). Nó thông báo cho trình biên dịch rằng hàm này có liên kết ngoài (external linkage), nghĩa là hàm này có thể được sử dụng bởi các file mã nguồn khác nhau trong chương trình. Do đó, sự khác biệt chính là `extern` chỉ rõ rằng hàm được định nghĩa ở nơi khác, trong khi khai báo `int fun();` có thể là khai báo cho một hàm được định nghĩa ở cùng file hoặc file khác. Nếu hàm `fun()` được định nghĩa trong cùng một file, cả hai khai báo sẽ tương đương. Tuy nhiên, nếu `fun()` được định nghĩa trong một file khác, thì cần phải sử dụng `extern int fun();` để trình biên dịch có thể tìm thấy định nghĩa của hàm.

Câu hỏi liên quan