Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ทำไม Global Variables จึงไม่ดีใน C/C++

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