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

วิธีพิมพ์ชื่อตัวแปรใน C

ใน C ไม่สามารถพิมพ์ชื่อตัวแปรได้โดยตรง เพราะชื่อตัวแปรหายไปหลังคอมไพล์ (Compile-time) แต่สามารถทำได้ด้วย Stringification Operator (#) ใน Preprocessor Macro

เทคนิค Stringification (# Operator)

ตัวดำเนินการ # ใน Macro จะแปลง Token ให้กลายเป็น String Literal

ตัวอย่าง

#include <stdio.h>

// Macro ที่รับชื่อตัวแปรและแปลงเป็น String
#define VariableName(name) #name

int main() {
    int name;
    char ch;
    
    printf("The variable name : %s", VariableName(name));
    printf("\nThe variable name : %s", VariableName(ch));
    
    return 0;
}

ผลลัพธ์

The variable name : name
The variable name : ch

คำอธิบาย

  1. #define VariableName(name) #name - Macro นี้รับ parameter name และนำ # มาแปลงเป็น String
  2. VariableName(name) ขยายเป็น "name"
  3. VariableName(ch) ขยายเป็น "ch"

การประยุกต์ใช้: Debug Macro

#include <stdio.h>

// Macro สำหรับ Debug: พิมพ์ชื่อตัวแปรและค่า
#define PRINT_VAR(x) printf(#x " = %d\n", x)

int main() {
    int a = 10, b = 20;
    float pi = 3.14f;
    
    PRINT_VAR(a);   // a = 10
    PRINT_VAR(b);   // b = 20
    // PRINT_VAR(pi); // Warning: format %d แต่เป็น float
    
    return 0;
}

ข้อจำกัด

  • ทำงานได้เฉพาะ Compile-time - ต้องรู้ชื่อตัวแปรขณะเขียนโค้ด
  • ไม่สามารถใช้กับตัวแปรที่สร้างขึ้นใน Runtime (Dynamic) ได้
  • ไม่ทำงานกับ Pointer/Array decay (ชื่อตัวแปรอาร์เรย์จะ decay เป็น pointer)

เทคนิคขั้นสูง: Token Pasting (##)

#define DECLARE_AND_PRINT(type, name) \
    type name = 0; \
    printf(#name " = %d\n", name)

int main() {
    DECLARE_AND_PRINT(int, myVar);  // สร้าง int myVar = 0; printf("myVar = %d\n", myVar);
    return 0;
}

สรุป

การพิมพ์ชื่อตัวแปรใน C ทำได้ผ่าน Preprocessor Stringification (#) เท่านั้น ซึ่งมีข้อจำกัดมาก ใช้เหมาะสำหรับ Debugging Macros หรือ Code Generation ไม่ใช่สำหรับ Reflection ใน Runtime