อินโฟกราฟิกเปรียบเทียบ #define กับ const ใน Arduino IDE แสดงตัวอย่างโค้ดและคำอธิบายคุณสมบัติของแต่ละแบบ พร้อมตารางเปรียบเทียบด้านล่าง เช่น เวลาทำงาน, การมีชนิดข้อมูล, การตรวจสอบ type และความเหมาะสมในการใช้งาน พื้นหลังโทนสีเขียวอมฟ้า มีโลโก้ devadiy มุมล่างขวา

#define ต่างกับ const ใน Arduino IDE ใช้อย่างไรให้ถูกต้อง

#define ต่างกับ const ใน Arduino IDE

ในการเขียนโค้ดบน Arduino IDE ไม่ว่าจะเป็นบอร์ด Arduino หรือ ESP32 เรามักต้องประกาศค่าคงที่ (constant) และมีอยู่ 2 วิธีที่ใช้บ่อย คือ

  • #define (Preprocessor Directive)
  • const (ตัวแปรค่าคงที่)

แม้ผลลัพธ์ดูคล้ายกัน แต่มีความแตกต่างสำคัญที่มือใหม่ควรรู้

#define คืออะไร

  • เป็นคำสั่ง Preprocessor ทำงานก่อนคอมไพล์
  • ไม่มีชนิดข้อมูล (type)
  • ไม่กิน RAM เพราะไม่ใช่ตัวแปร
  • เหมาะกับค่าที่ต้องแทนที่ตรง ๆ เช่นหมายเลขพิน หรือค่าคงที่ที่ใช้ในเงื่อนไขการคอมไพล์

#define LED_PIN 2

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
}

const คืออะไร

  • เป็นตัวแปรที่ประกาศให้แก้ค่าไม่ได้
  • มี type ชัดเจน เช่น int, float, char
  • Compiler ตรวจสอบชนิดข้อมูล ลดความผิดพลาดได้
  • อาจใช้ RAM แต่ถ้าเป็นค่าคงที่จะถูกเก็บใน Flash

const int ledPin = 2;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
}

ตารางเปรียบเทียบ #define vs const

 

คุณสมบัติ#defineconst
ขั้นตอนทำงานก่อนคอมไพล์ (Preprocessor)ตอนคอมไพล์ (Compile time)
มีชนิดข้อมูลไหม❌ ไม่มี type✅ มี type
ตรวจสอบ type❌ ไม่ตรวจ✅ ตรวจสอบได้
ใช้ RAM ไหม❌ ไม่ใช้⚠ อาจใช้เล็กน้อย
เหมาะกับอะไรค่าที่แทนที่ตรง ๆค่าที่ต้องการ type ชัด

ควรใช้แบบไหนดี

  • ใช้ const เป็นหลัก เพราะปลอดภัยกว่า และ compiler ช่วยตรวจ type
  • ใช้ #define ในกรณีเปิด/ปิดฟีเจอร์ด้วย #ifdef หรือประกาศค่าที่ต้องใช้ในขั้นตอน preprocessor

ตัวอย่างการใช้ผสมกัน

#define DEBUG_MODE

const int ledPin = 2;

void setup() {
  pinMode(ledPin, OUTPUT);

  #ifdef DEBUG_MODE
    Serial.begin(115200);
    Serial.println(“Debug mode ON”);
  #endif
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(500);
  digitalWrite(ledPin, LOW);
  delay(500);
}

📌 อ่านต่อที่เกี่ยวข้อง

 
♦ รายละเอียดพื้นฐานของ — ESP32 คืออะไร พร้อมจุดเด่นและวิธีเริ่มต้นใช้งาน


♠ ถ้ายังไม่เคยใช้ Arduino IDE มาก่อน ลองคลิกอ่าน — Arduino IDE Guide สำหรับผู้เริ่มต้น เพื่อรู้วิธีติดตั้งและเตรียมเขียนโค้ดง่าย ๆ ได้ทันที

#define ทำงานตอนไหน?
→ ทำงานตอน Preprocessor แทนที่ข้อความก่อน compile

const ต่างจากตัวแปรทั่วไปอย่างไร?
→ ไม่สามารถเปลี่ยนค่าได้หลังประกาศ

ใช้ #define แล้ว compiler ตรวจ type ไหม?
→ ไม่ตรวจ type อาจเกิดบั๊กได้ถ้าใช้ผิดชนิดข้อมูล

ใช้ const จะช้ากว่า #define ไหม?
→ ไม่ต่างกันในงานทั่วไป เพราะ compiler optimize ให้

ใช้ #define เก็บค่าข้อความได้ไหม?
→ ได้ เช่น #define MSG “Hello”

ถ้าต้องการปิดโค้ดบางส่วนควรใช้แบบไหน?
→ ใช้ #define ร่วมกับ #ifdef

const ต้องใส่ type เสมอไหม?
→ ใช่ เช่น const float pi = 3.14;

ใช้ #define กับพินดิจิทัล ESP32 ได้ไหม?
→ ได้ แต่ const ปลอดภัยกว่าเพราะตรวจ type

ถ้าใช้ค่าที่คำนวณจากค่าคงที่อื่นควรใช้แบบไหน?
→ ใช้ const เพื่อให้ compiler คำนวณครั้งเดียวและตรวจ type

การใช้ #define เยอะ ๆ ทำให้โค้ดอ่านยากไหม?
→ อาจจะ ควรใช้ชื่อสื่อความหมายและเก็บเป็น const เมื่อเป็นไปได้

Shopping Cart
Scroll to Top