1. บทนำ
enum
(ชนิดข้อมูลแบบ Enumerated) ในภาษา C เป็นเครื่องมือสำคัญที่ช่วยเพิ่มความอ่านง่ายและการดูแลรักษาโค้ด ในบทความนี้จะอธิบายตั้งแต่พื้นฐานการใช้งาน enum
ไปจนถึงเทคนิคการประยุกต์ใช้ ไม่ว่าคุณจะเป็นมือใหม่หรือระดับกลาง เมื่ออ่านคู่มือนี้แล้ว จะสามารถใช้งาน enum
ได้อย่างเชี่ยวชาญและเขียนโค้ดภาษา C ได้มีประสิทธิภาพยิ่งขึ้น
2. enum
คืออะไร?
ความหมายและบทบาทของ enum
enum
หรือ “ชนิดข้อมูลแบบ Enumerated” ใช้สำหรับกำหนดกลุ่มของค่าคงที่ (constant) โดยปกติจะใช้ตั้งชื่อที่จดจำง่ายสำหรับค่าคงที่ที่มีความเกี่ยวข้องกัน เช่น ในโปรแกรมที่ต้องจัดการกับสี การใช้ตัวเลขอาจจะไม่ชัดเจน แต่หากใช้ enum
ก็สามารถกำหนดชื่อเช่น RED
, GREEN
, BLUE
แทนค่าแต่ละสีได้
ทำไมต้องใช้ enum
?
การใช้ enum
มีข้อดีดังนี้
- เพิ่มความอ่านง่ายของโค้ด: สามารถใช้ชื่อแทนค่าตัวเลข ทำให้เข้าใจโค้ดได้ง่ายขึ้น
- ดูแลรักษาโค้ดได้ง่ายขึ้น: หากต้องแก้ไขกลุ่มของค่าคงที่ สามารถแก้ที่
enum
เดียวโดยไม่ต้องตามไปแก้หลายจุด - ลดข้อผิดพลาด (บั๊ก): จำกัดให้ใช้แค่ค่าที่กำหนดใน
enum
ช่วยป้องกันการใช้ค่าผิด

3. วิธีใช้งาน enum
เบื้องต้น
วิธีการกำหนด enum
รูปแบบพื้นฐานของการกำหนด enum
มีดังนี้
enum { RED, GREEN, BLUE };
ในตัวอย่างนี้ RED
จะมีค่าเป็น 0, GREEN
เป็น 1 และ BLUE
เป็น 2 โดยอัตโนมัติ หากต้องการตั้งชื่อให้กับ enum
สามารถเขียนได้ดังนี้
enum Color { RED, GREEN, BLUE };
สร้าง enum
ที่ชื่อว่า Color
และสามารถใช้ชื่อนี้ประกาศตัวแปรได้
ตัวอย่างโค้ดจริง
ตัวอย่างง่ายๆ ของการใช้ enum
มีดังนี้
#include <stdio.h>
enum Color { RED, GREEN, BLUE };
int main() {
enum Color color;
color = RED;
printf("%dn", color); // แสดงผล: 0
return 0;
}
ในตัวอย่างนี้ RED
จะแสดงผลเป็น 0
4. การใช้งาน enum
ในเชิงลึก
การกำหนดค่าอัตโนมัติและกำหนดค่าด้วยตนเอง
โดยปกติ enum
จะกำหนดค่าเริ่มต้นเป็น 0, 1, 2… ให้อัตโนมัติ แต่สามารถกำหนดค่าตัวเลขเองได้ เช่น
enum Days {
MONDAY = 1,
TUESDAY,
WEDNESDAY,
THURSDAY = 10,
FRIDAY
};
ในตัวอย่างนี้ MONDAY
คือ 1, TUESDAY
จะเป็น 2 และ THURSDAY
เป็น 10 ส่วน FRIDAY
จะเป็น 11 อัตโนมัติ
การใช้ enum
กับ switch-case
มักใช้ enum
ร่วมกับคำสั่ง switch-case
เพื่อให้โค้ดอ่านง่ายขึ้น
enum Color { RED, GREEN, BLUE };
int main() {
enum Color color = BLUE;
switch(color) {
case RED:
printf("Redn");
break;
case GREEN:
printf("Greenn");
break;
case BLUE:
printf("Bluen");
break;
default:
printf("Unknown colorn");
}
return 0;
}
ในตัวอย่างนี้ จะแสดงข้อความตามค่าของตัวแปร color
การใช้ enum
ใน switch-case จะช่วยให้โค้ดชัดเจนขึ้น
ใช้ enum
เป็น index ของอาเรย์
สามารถใช้ enum
เป็น index ของอาเรย์ได้ด้วย
enum Color { RED, GREEN, BLUE };
char* color_names[] = { "Red", "Green", "Blue" };
printf("%sn", color_names[RED]); // แสดงผล: Red
ตัวอย่างนี้ใช้ค่า enum
เพื่อเลือก string ในอาเรย์

5. ข้อควรระวังและแนวทางที่ดีที่สุดของ enum
ค่าซ้ำกันและค่าที่อยู่นอกขอบเขต
สามารถกำหนดค่าซ้ำกันใน enum
ได้ แต่ควรหลีกเลี่ยงเพราะทำให้โค้ดเข้าใจยากและดูแลยากขึ้น
enum Days {
MONDAY = 1,
FRIDAY = 1
};
ในกรณีนี้ MONDAY
และ FRIDAY
มีค่าเท่ากัน อาจทำให้เกิดปัญหาได้ และยังสามารถกำหนดค่าที่ไม่ได้อยู่ใน enum
ให้กับตัวแปร enum
ได้ด้วย (ซึ่งไม่ควรทำ)
enum Days { MONDAY = 1, TUESDAY = 2 };
enum Days day = 8; // ไม่เกิด compile error แต่ไม่ควรทำ
ใช้ enum
เพื่อเพิ่มความอ่านง่ายของโค้ด
ควรใช้ enum
เพื่อให้โค้ดอ่านง่ายและลดข้อผิดพลาด การใช้ enum
ช่วยให้เงื่อนไขในโปรแกรมชัดเจนมากขึ้นเมื่อเทียบกับการใช้ตัวเลขเปล่า
6. ตัวอย่างเปรียบเทียบโค้ดที่ใช้ enum
เปรียบเทียบกรณีไม่ได้ใช้ enum
กับกรณีที่ใช้
เปรียบเทียบตัวอย่างโค้ดที่ไม่ได้ใช้ enum
กับโค้ดที่ใช้ enum
กรณีไม่ได้ใช้ enum
void findNearest(int day) {
switch(day) {
case 0:
printf("วันนี้n");
break;
case 1:
printf("เมื่อวานนี้n");
break;
// ...ข้ามบางส่วน
}
}
กรณีใช้ enum
enum Days { TODAY, YESTERDAY };
void findNearest(Days day) {
switch(day) {
case TODAY:
printf("วันนี้n");
break;
case YESTERDAY:
printf("เมื่อวานนี้n");
break;
// ...ข้ามบางส่วน
}
}
จะเห็นว่าเมื่อใช้ enum
จะทำให้เข้าใจเจตนาของโค้ดได้ง่ายขึ้น

7. สรุป
enum
เป็นฟีเจอร์ที่ทรงพลังในภาษา C ที่ช่วยเพิ่มความอ่านง่ายและการดูแลรักษาโค้ด หากเข้าใจและใช้งานได้ถูกต้อง จะช่วยให้เขียนโปรแกรมได้อย่างมีประสิทธิภาพและลดข้อผิดพลาด บทความนี้หวังว่าจะช่วยให้คุณเข้าใจการใช้ enum
ตั้งแต่พื้นฐานไปจนถึงการประยุกต์ใช้งานจริงในโปรเจกต์ของคุณ