![]()
×
|
Khóa extern chủ yếu dùng trong các module C programming rất nhiều
Có 2 mục đich mà người ta dùng extern:
1) Giả sử bạn declare một biến hoặc một hàm mà chỉ local trong module c file đó (không có declare trong header file, ví dụ file a.c), có nghĩa là bạn chỉ muốn biến đó hoặc hàm đó là biến hoặc hàm global của cái module a.c file mà thôi, bên ngoài hàm đó tuyệt nhiên không biết gì về mấy cái này. Thông thường thì ta declare nó trong một header file (như a.h) rồi những module khác có thể include a.h, và nó trở thành global với tất cả các modules. Declare biến/hàm local của một module là một hình thức data hiding (nếu không dùng OOD). Sau đó nếu ta muốn export biến/hàm này vô một module khác, thì ta phải dùng khóa extern trong header file (a.h). Làm như vậy nó an toàn hơn.
2) Đôi khi khóa extern cũng được dùng trong C++. C++ compiler thông thường mangle những hàm declare trong tất cả các module, mà C không có mangle những hàm này. Do đó nếu ta muốn pha trộn giữa hàm C++ với với hàm C thì ta phải dùng khóa exern như sau:
#if defined(__cplusplus)
extern "C"
void funcA();
void funcB();
#endif // defined(__cplusplus)
1) Giả sử bạn declare một biến hoặc một hàm mà chỉ local trong module c file đó (không có declare trong header file, ví dụ file a.c), có nghĩa là bạn chỉ muốn biến đó hoặc hàm đó là biến hoặc hàm global của cái module a.c file mà thôi, bên ngoài hàm đó tuyệt nhiên không biết gì về mấy cái này. Thông thường thì ta declare nó trong một header file (như a.h) rồi những module khác có thể include a.h, và nó trở thành global với tất cả các modules. Declare biến/hàm local của một module là một hình thức data hiding (nếu không dùng OOD). Sau đó nếu ta muốn export biến/hàm này vô một module khác, thì ta phải dùng khóa extern trong header file (a.h). Làm như vậy nó an toàn hơn.
2) Đôi khi khóa extern cũng được dùng trong C++. C++ compiler thông thường mangle những hàm declare trong tất cả các module, mà C không có mangle những hàm này. Do đó nếu ta muốn pha trộn giữa hàm C++ với với hàm C thì ta phải dùng khóa exern như sau:
#if defined(__cplusplus)
extern "C"
void funcA();
void funcB();
#endif // defined(__cplusplus)