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

คีย์เวิร์ด _Generic ใน C

เรารู้ว่า Macro ใน C/C++ ไม่มีการตรวจสอบชนิดข้อมูล (type checking) Macro รับอาร์กิวเมนต์ชนิดใดก็ได้ ตัวอย่างต่อไปนี้แสดงปัญหานี้ชัดเจน

ตัวอย่าง Macro ปกติ

#include <stdio.h>
#define INCREMENT(X) ++X

int main() {
    int x = 5; float y = 2.56; char z = 'A';
    printf("Integer Increment: %d\n", INCREMENT(x));
    printf("Float Increment: %f\n", INCREMENT(y));
    printf("Character Increment: %c\n", INCREMENT(z));
}

ผลลัพธ์

Integer Increment: 6
Float Increment: 3.560000
Character Increment: B

นี่คือปัญหาของ Macro ในรุ่นใหม่ของ C สามารถใช้คีย์เวิร์ด _Generic เพื่อกำหนด macro ให้ทำงานต่างกันตามชนิดข้อมูล มาดูตัวอย่าง

ตัวอย่างใช้ _Generic

#include <stdio.h>

#define INCREMENT(X) _Generic((X), \
    char: X + 10, \
    int: X + 1, \
    float: X + 2.5, \
    default: 0)

int main() {
    int x = 5; float y = 2.56; char z = 'A';
    printf("Integer Increment: %d\n", INCREMENT(x));
    printf("Float Increment: %f\n", INCREMENT(y));
    printf("Character Increment: %c\n", INCREMENT(z));
}

ผลลัพธ์

Integer Increment: 6
Float Increment: 5.060000
Character Increment: K