Commenting Practices & Doxygen: ศิลปะการคอมเมนต์โค้ดเพื่อยกระดับ Writing Safer C
บทนำ: ทำไมการคอมเมนต์ไม่ใช่แค่การทดโน้ตกันลืม?
สวัสดีครับน้องๆ วิศวกรและเพื่อนนักพัฒนาชาว www.123microcontroller.com ทุกคน! วันนี้วิศวกรขอบตาดำๆ จะมาชวนคุยเรื่องที่หลายคนอาจจะมองข้ามไปเวลาเขียนโปรแกรม นั่นก็คือ “การเขียนคอมเมนต์ (Comments)” ครับ
ในโลกของการทำฮาร์ดแวร์และ Embedded Systems โค้ดที่เราเขียนวันนี้ อาจจะต้องถูกนำไปให้นักพัฒนารุ่นหลังอ่านหรือแก้ไขต่อในอีก 5 ปีข้างหน้า การเขียนคอมเมนต์จึงไม่ใช่แค่การจดโน้ตกันลืมครับ แต่ในบริบทของการเขียน C ให้ปลอดภัย (Writing Safer C) การคอมเมนต์คือ “คู่มือและพิมพ์เขียว” ที่ช่วยป้องกันไม่ให้เพื่อนร่วมทีม (หรือแม้แต่ตัวเราเอง) เข้าใจลอจิกผิดจนแก้โค้ดพัง! ยิ่งไปกว่านั้น วันนี้เราจะมารู้จักกับ Doxygen เครื่องมือระดับมาตรฐานอุตสาหกรรมที่จะเปลี่ยนคอมเมนต์ธรรมดาๆ ของเราให้กลายเป็น Document สุดหรูแบบอัตโนมัติกันครับ!
พิมพ์เขียวของโค้ดและมาตรฐาน Doxygen
เวลาที่เราพูดถึงเรื่อง Writing Safer C แหล่งข้อมูลระดับเซียนได้ให้ความสำคัญกับการคอมเมนต์ไว้อย่างมาก โดยสามารถสรุปแก่นสำคัญได้ดังนี้ครับ:
- Doxygen มาตรฐานที่ทุกคนยอมรับ (The De Facto Standard):
ภาษา C ไม่ได้มีรูปแบบการทำ Document ที่เป็นมาตรฐานฝังมาในตัวภาษาเหมือนภาษายุคใหม่ๆ แต่วงการฮาร์ดแวร์ได้ยกย่องให้ Doxygen เป็นเครื่องมือมาตรฐาน (De facto standard) ในการสร้างคู่มือครับ การทำงานของมันเหมือนมีเลขาส่วนตัว โดยมันจะสกัดเอาคอมเมนต์ที่ถูกเขียนในรูปแบบเฉพาะ (เช่น นำหน้าด้วย
/**) ไปสร้างเป็นหน้าเว็บ HTML, ไฟล์ PDF, หรือแม้กระทั่งวาดแผนภาพ Dependency graphs และ Call trees ให้เราแบบอัตโนมัติ - แยกแยะระหว่าง Interface และ Implementation:
กฎทองของการคอมเมนต์คือการแยกหน้าที่ระหว่าง Header file (
.h) และ Source file (.c) ให้ชัดเจน- Interface (ใน
.h): ใช้ Doxygen อธิบายว่าฟังก์ชันนี้ “ทำอะไร (What is done)”, พารามิเตอร์คืออะไร, และคืนค่าอะไร - Implementation (ใน
.c): โค้ดจะบอกเราอยู่แล้วว่า “ทำงานอย่างไร” ดังนั้นคอมเมนต์ข้างในฟังก์ชันจึงควรเน้นอธิบาย “เหตุผลและวิธีการ (Manner/Purpose)” ว่าทำไมถึงตัดสินใจเขียนแบบนี้
- Interface (ใน
- คอมเมนต์มีไว้เพื่อป้องกันบั๊กระยะยาว: การทำ Document ให้แนบชิดติดกับตัวโค้ด (Keep documentation as close to the code as possible) จะช่วยลดค่าใช้จ่ายในการบำรุงรักษา และลดความเสี่ยงที่เอกสารกับโค้ดจะไม่ตรงกันเมื่อเวลาผ่านไป

ตัวอย่างการเขียนคอมเมนต์แบบ Clean Code
มาดูตัวอย่างการเขียนคอมเมนต์แบบ Clean Code และปลอดภัยตามมาตรฐาน Doxygen ใน Header file กันครับ
#include <stdint.h>
#include <stdbool.h>
/**
* @brief ฟังก์ชันตั้งค่าความเร็วของมอเตอร์ผ่าน PWM
*
* ใช้สำหรับปรับความเร็วของมอเตอร์หลัก โดยจะส่งค่าไปยังฮาร์ดแวร์ Timer
* เพื่อเปลี่ยน Duty Cycle
*
* @param speed_percent ความเร็วที่ต้องการ หน่วยเป็นเปอร์เซ็นต์ (0 ถึง 100)
* หากค่าเกิน 100 จะถูกปัดลงมาเหลือ 100 อัตโนมัติ
* @param is_forward ทิศทางการหมุน: true = เดินหน้า, false = ถอยหลัง
*
* @return คืนค่า true หากตั้งค่าฮาร์ดแวร์สำเร็จ, คืนค่า false หากฮาร์ดแวร์ไม่พร้อม
*/
bool motor_set_speed(uint8_t speed_percent, bool is_forward);
int main(void) {
/*
* ❌ ข้อผิดพลาดที่ควรระวัง: การใช้ Nested Comments
* หากเผลอลืมพิมพ์ปิดคอมเมนต์ หรือใช้ ซ้อนกัน
* ฟังก์ชันสำคัญอย่าง safety_checker() จะถูกคอมไพเลอร์มองข้ามไปเลย!
*/
/* The following code was meant to be part of the build...
motor_set_speed(50, true);
/* บั๊กซ่อนเร้น! คำสั่งบรรทัดนี้จะไม่ถูกทำงาน */
safety_checker();
return 0;
}
ข้อควรระวังและการทำ Comments อย่างมืออาชีพ
เพื่อไม่ให้คอมเมนต์กลายเป็นต้นเหตุของการสร้างบั๊กเสียเอง คู่มือและมาตรฐานการเขียนโค้ดได้แนะนำ Best Practices ไว้ดังนี้ครับ:
- ระวังหายนะจาก Nested Comments: นี่คือปัญหาคลาสสิกของภาษา C ครับ! การใช้คอมเมนต์แบบ
/* ... */ซ้อนกันอาจทำให้คอมไพเลอร์ (Compiler) มองข้ามคำสั่งที่สำคัญ (เช่น ระบบตัดการทำงานฉุกเฉิน) ไปโดยไม่ตั้งใจ หากต้องการปิดการทำงานของโค้ดทั้งบล็อก (Comment out code) แนะนำให้ใช้ Conditional compilation อย่าง#if 0 ... #endifหรือ#ifndef NDEBUGจะปลอดภัยกว่าการใช้/* ... */คลุมทับครับ - คอมเมนต์ที่ล้าหลัง เลวร้ายยิ่งกว่าไม่มีคอมเมนต์ (Outdated comments are worse than no comments): หากมีการแก้ไขโค้ดเมื่อไหร่ ต้อง อัปเดตคอมเมนต์ตามทันทีเสมอ! เพราะคอมเมนต์ที่ให้ข้อมูลผิดๆ จะหลอกให้นักพัฒนาคนอื่นหลงทาง และนำไปสู่ความผิดพลาดร้ายแรง (Mislead developers) ได้ครับ
- คอมไพเลอร์ไม่สนใจคอมเมนต์ (Compiler Ignorance): จำไว้เสมอว่าตอนโปรแกรมคอมไพล์ คอมเมนต์ทั้งหมดจะถูกลบทิ้งไป มันไม่ได้ส่งผลต่อประสิทธิภาพหรือความเร็วของโปรแกรมเลย ดังนั้น “จงอย่ากลัวที่จะคอมเมนต์ให้ละเอียดและชัดเจนครับ”
- ตรวจสอบคอมเมนต์ผ่าน Code Review: คุณภาพของคอมเมนต์ควรถูกตรวจสอบร่วมกับการทำ Code Review เสมอ เพื่อให้มั่นใจว่ามันอธิบายได้กระชับ ชัดเจน และมีคุณค่าพอสำหรับคนที่จะมาทำงานต่อครับ
สรุป (Conclusion)
ในบริบทของการทำ Writing Safer C การคอมเมนต์ไม่ใช่เรื่องน่าเบื่อครับ แต่มันคือ “การสร้างภูมิคุ้มกัน” ให้กับโปรเจกต์ของเรา การประยุกต์ใช้เครื่องมือระดับโลกอย่าง Doxygen และการมีวินัยในการอัปเดตคอมเมนต์ จะช่วยให้ฮาร์ดแวร์ที่เราควบคุมทำงานได้อย่างถูกต้องตามที่เรา (และเพื่อนร่วมทีม) ตั้งใจไว้ครับ
หากเพื่อนๆ สนใจอยากดูวิธีการตั้งค่าไฟล์ Doxyfile หรืออยากอ่านเจาะลึกเทคนิคการเขียน C สำหรับควบคุมไมโครคอนโทรลเลอร์แบบมืออาชีพ อย่าลืมแวะเข้ามาติดตามและร่วมแชร์โค้ดกันต่อได้ที่เว็บ www.123microcontroller.com ของพวกเรานะครับ แล้วพบกันใหม่ในบทความหน้า Happy Coding ครับทุกคน!