ตัวแปร External (External variables) เรียกอีกอย่างว่า Global variables คือตัวแปรที่ประกาศนอกฟังก์ชัน และเข้าถึงได้ทั่วทั้งโปรแกรม คีย์เวิร์ด extern ใช้สำหรับประกาศ (declare) และกำหนด (define) ตัวแปร external
นอกจากนี้ extern "C" ใช้ใน C++ เพื่อประกาศฟังก์ชันที่เขียนและคอมไพล์ในภาษา C เพื่อให้ C++ เรียกใช้ C libraries ได้
ไวยากรณ์ของ extern
extern datatype variable_name; // ประกาศตัวแปร external
extern datatype func_name(); // ประกาศฟังก์ชัน external
ตัวอย่างการใช้งาน extern
#include <stdio.h>
extern int x = 32; // กำหนดและประกาศ external variable x
int b = 8; // global variable ธรรมดา
int main() {
extern int b; // ประกาศว่า b เป็น external (อ้างถึงตัวนอก)
printf("The value of extern variables x and b : %d,%d\n", x, b);
x = 15;
printf("The value of modified extern variable x : %d\n", x);
return 0;
}
ผลลัพธ์
The value of extern variables x and b : 32,8
The value of modified extern variable x : 15
คำอธิบาย
extern int x = 32;- กำหนดค่าและประกาศ x เป็น external variableint b = 8;- global variable ธรรมดา (เป็น external โดยอัตโนมัติ)- ใน
main():extern int b;บอกคอมไพเลอร์ว่า b ถูกกำหนดที่อื่น (ในที่นี้คือ global scope เดียวกัน) - สามารถแก้ไขค่า
xได้ เพราะไม่ได้ประกาศเป็นconst
กรณีการใช้งานจริง (Use Cases)
1. แบ่งปันตัวแปรระหว่างไฟล์ (Multiple Source Files)
file1.c
int global_counter = 0; // Definition
file2.c
extern int global_counter; // Declaration only
void increment() { global_counter++; }
2. ใช้ร่วมกับ extern "C" สำหรับ C++ เรียก C Library
// C header: mylib.h
#ifdef __cplusplus
extern "C" {
#endif
void c_function(int x);
#ifdef __cplusplus
}
#endif
สรุป
externใช้สำหรับประกาศ (declaration) ไม่ใช่กำหนด (definition) - ยกเว้นกรณีมีการกำหนดค่าเริ่มต้นพร้อมๆ กัน- ช่วยให้หลายไฟล์ (.c/.cpp) เข้าถึงตัวแปร/ฟังก์ชันเดียวกันได้
extern "C"ป้องกัน name mangling ของ C++ เพื่อความเข้ากันได้กับ C