1. const ในภาษา C คืออะไร?

เมื่อเขียนโปรแกรมด้วยภาษา C คำสำคัญ const จะช่วยป้องกันไม่ให้ค่าของตัวแปรถูกเปลี่ยนโดยไม่ตั้งใจ const ใช้เพื่อประกาศว่า “ค่าของตัวแปรนี้ห้ามเปลี่ยนแปลง!” เมื่อกำหนดค่าให้ตัวแปรแล้ว จะไม่สามารถเปลี่ยนค่าได้อีกต่อไป

ตัวอย่างเช่น ลองดูโค้ดด้านล่างนี้:

const int x = 10;
x = 20;  // เกิดข้อผิดพลาด!

เมื่อใช้ const แบบนี้ จะทำให้ค่าของ x คงที่ ไม่สามารถเปลี่ยนแปลงได้โดยไม่ได้ตั้งใจ การหยุดไม่ให้ตัวแปร “อยากเป็นอิสระ!” จะช่วยให้โปรแกรมมีเสถียรภาพมากขึ้น

2. ทำไมควรใช้ const?

2.1 เพิ่มความปลอดภัยให้โค้ด

การใช้ const จะช่วยลดความเสี่ยงที่ข้อมูลสำคัญหรือค่าคงที่ในโปรแกรมจะถูกเปลี่ยนโดยไม่ได้ตั้งใจ หากเปลี่ยนแปลงค่าดังกล่าวอาจทำให้โปรแกรมไม่เสถียร แต่การใช้ const จะช่วยป้องกันสิ่งนี้

2.2 ได้ประโยชน์จากการเพิ่มประสิทธิภาพของคอมไพเลอร์

ด้วย const คอมไพเลอร์จะรู้ว่าค่านี้ไม่มีการเปลี่ยนแปลง จึงสามารถปรับประสิทธิภาพการทำงานได้ดีขึ้น โดยเฉพาะเมื่อใช้ตัวแปร const ซ้ำหลายครั้ง จะช่วยให้โปรแกรมทำงานเร็วขึ้น

2.3 อ่านง่ายและเหมาะกับการทำงานเป็นทีม

การใช้ const เป็นแนวทางปฏิบัติที่ดีสำหรับการเขียนโค้ดที่อ่านง่าย โดยเฉพาะในการพัฒนาแบบทีม จะช่วยให้ทีมงานเข้าใจได้ชัดเจนว่า “ค่านี้เปลี่ยนไม่ได้” ป้องกันความผิดพลาดจากการเปลี่ยนแปลงค่าตัวแปรโดยไม่ได้ตั้งใจ

3. ทำความเข้าใจความสัมพันธ์ระหว่าง Pointer และ const

ความสัมพันธ์ระหว่าง Pointer และ const เป็นจุดที่สร้างความสับสนสำหรับผู้ที่เรียนภาษา C ตำแหน่งที่วาง const จะมีผลต่อพฤติกรรมของ Pointer และค่าที่ชี้ไป

  • const int *p;
    ในกรณีนี้ ค่าที่ p ชี้ไป (*p) ไม่สามารถเปลี่ยนแปลงได้ แต่ตัว Pointer p ยังเปลี่ยนไปชี้ตำแหน่งอื่นได้
  • int *const p;
    ในกรณีนี้ ตัว Pointer p ไม่สามารถเปลี่ยนไปชี้ตำแหน่งอื่นได้ แต่ค่าที่ *p ชี้สามารถเปลี่ยนได้
  • const int *const p;
    ในกรณีนี้ ทั้ง Pointer p และค่าที่ชี้ไป *p ไม่สามารถเปลี่ยนแปลงได้เลย เป็น “คงที่แน่นอน”

Pointer มีพลังมาก แต่หากใช้ผิดอาจเกิดข้อผิดพลาด ควรใส่ใจตำแหน่งการวาง const เสมอ

4. ตัวอย่างการใช้ const ในทางปฏิบัติ

4.1 ใช้ const กับอาร์กิวเมนต์ของฟังก์ชัน

เมื่อส่ง Array หรือ Pointer ให้กับฟังก์ชัน หากไม่ต้องการให้ข้อมูลถูกเปลี่ยนในฟังก์ชัน ให้ใช้ const ตัวอย่างเช่น โค้ดด้านล่างนี้จะป้องกันไม่ให้เนื้อหา Array ถูกแก้ไขภายในฟังก์ชัน

void printArray(const int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("
");
}

วิธีนี้จะช่วยให้เรียกดูข้อมูลใน Array ได้อย่างปลอดภัย

4.2 ใช้ const กับ Lookup Table

สำหรับข้อมูลที่ไม่จำเป็นต้องเปลี่ยนระหว่างรันโปรแกรม เช่น Lookup Table การใช้ const จะเหมาะสม ตัวอย่างนี้เป็นการเก็บชื่อวันไว้เป็นข้อมูลคงที่

const char *days[] = {"Monday", "Tuesday", "Wednesday"};

ข้อมูลจะถูกใช้งานได้อย่างเสถียรและไม่เกิดการเปลี่ยนแปลงโดยไม่ได้ตั้งใจ

5. ข้อควรระวังและการใช้ const ผิดวิธี

5.1 ตัวอย่างการใช้ const ผิด

ถ้าใช้ const ผิดอาจเกิดข้อผิดพลาดหรือพฤติกรรมไม่คาดคิด ดูตัวอย่างนี้:

void modifyArray(const int arr[], int size) {
    arr[0] = 10;  // คอมไพล์ไม่ผ่าน!
}

ในฟังก์ชันนี้ พยายามเปลี่ยนค่าของ Array ที่ถูกกำหนด const ซึ่งจะทำให้เกิดข้อผิดพลาดขณะคอมไพล์ const รับประกันว่า “เปลี่ยนไม่ได้” หากฝืนเปลี่ยนจะเกิดข้อผิดพลาด

5.2 ข้อควรระวังเมื่อใช้ const กับการ cast

สามารถใช้ const_cast เพื่อถอด const ออกได้ แต่เป็นวิธีที่เสี่ยงมาก อาจทำให้เกิดปัญหาหรือผลลัพธ์ที่ไม่สามารถคาดเดาได้ตามระบบปฏิบัติการต่าง ๆ จึงควรหลีกเลี่ยง เพื่อความปลอดภัยควรเคารพจุดประสงค์ของ const เสมอ

6. สรุป

const ในภาษา C เป็นเครื่องมือสำคัญที่ช่วยเพิ่มความปลอดภัยให้กับโค้ดและเพิ่มประสิทธิภาพการทำงาน หากใช้ const อย่างเหมาะสมกับตัวแปรและ Pointer จะช่วยให้โปรแกรมเสถียรและลดข้อผิดพลาดได้

ครั้งต่อไปที่เขียนโปรแกรม ลองใช้ const ให้มากขึ้น จะพบว่ามีหลายจุดที่สามารถใช้เพื่อทำให้โค้ดของคุณแข็งแกร่งขึ้นได้!