Global Variables ประกาศนอกฟังก์ชันใดๆ คงค่าตลอดการรันโปรแกรม เข้าถึงได้จากทุกที่
ปัญหาของ Global Variables
- Non-const Globals เป็นอันตราย − ฟังก์ชันไหนก็แก้ไขได้ ทำให้ Debug ยาก
- ลด Modularity และ Flexibility − Coupling สูง ระหว่างฟังก์ชัน
- Namespace Pollution − ชื่อชนกันง่าย
- Thread Safety − Race Condition ใน Multi-threaded
- Testing ยาก − State คงเหลือระหว่าง Test Cases
แนวทางแก้ไข
- ใช้ Local Variables ให้มากที่สุด
- ส่งผ่าน Parameters แทน
- ถ้าจำเป็นต้อง Global ใช้
staticจำกัด Scope ในไฟล์ (Internal Linkage) - ตั้ง Prefix
g_เพื่อบ่งชี้ว่าเป็น Global - Encapsulate ใน Class/Struct พร้อม Access Control
ตัวอย่าง
#include <stdio.h>
int g_var; // Global (External Linkage)
static int g_var1; // Static Global (Internal Linkage)
int main() {
int a = 15, b = 20;
g_var = a + b;
g_var1 = a - b;
printf("a = %d\nb = %d\ng_var = %d\ng_var1 = %d", a, b, g_var, g_var1);
return 0;
}
ผลลัพธ์
a = 15
b = 20
g_var = 35
g_var1 = -5