Tutorial

C Language 101 - Preprocessor Directives (EP.11)

By Arnon Puitrakul - 19 มิถุนายน 2015

C Language 101 - Preprocessor Directives (EP.11)

และแล้วก็มาถึงเรื่องสุดท้ายแล้ว แต่เรื่องนี้โดยส่วนตัวผมก็ไม่ค่อยได้ใช้เลยนะ นั่นคือเรื่องของ Preprocessor Directives นั่นเอง

Preprocessor Directives คืออะไร ?

Preprocessor Directives เป็นส่วนที่ใช้ประกาศไว้บนสุดของตัวโปรแกรมเรา เพื่อให้ Compiler ทำงานตามที่เรากำหนด ก่อนที่มันจะแปล (Compile) โปรแกรมของเรา ซึ่งแน่นอนว่า เราก็เคยใช้ Preprocessor Directives มาแล้ว ตอนที่เรา #include <stdio.h> เข้ามาในโปรแกรมเรา ลองดูถ้าเราไม่เติมบรรทัดนั้นเข้าไป คำสั่งหลาย ๆ ตัว ถ้าเราไปเรียกมัน เวลา Compile มันจะขึ้น Error ขึ้นมาเพราะว่า ตัวภาษา C มันไม่รู้จักคำสั่งนี้
ทีนี้เราลองมาดูว่า นอกจาก #include แล้วมันจะมีอะไรอีก
มาที่อันแรกกันเลยนั่นคือ #define ตัวนี้มันเอาไว้ประกาศค่า อารมณ์เหมือนเราสร้างตัวแปรขึ้นมาเก็บค่า แต่ค่านี้เราจะมาสามารถที่จะเปลี่ยนในโค๊ตโปรแกรมเราได้ (ค่าคงที่นั่นแหละ)

#define PI = 3.14

อย่างในตัวอย่างเราก็บอกว่า ให้มันสร้างค่าคงที่ชื่อ PI และให้ PI มีค่าเป็น 3.14
Note : เวลาเราตั้งชื่อตัวแปรที่เป็นค่าคงที่ ให้เราตั้งชื่อด้วยตัวหนังสือพิมพ์ใหญ่ทั้งหมดจะอ่านง่ายกว่านะ
ถัดมาคือ #undef จะทำงานตรงข้ามกับ #define นั่นคือ เป็นการลบค่าคงที่ออกไปนั่นเอง

#define PI = 3.14
#undef PI

จากตัวอย่างด้านบน เราจะเห็นกว่า เราใช้ #define เพื่อประกาศค่าคงที่ PI แต่พอมาบรรทัดถัดมา เรามาลบค่า PI ออกมา ทำให้เราไม่สามารถเรียกค่า PI ที่เราตั้งในโปรแกรมได้ ถ้าเรียกปุ๊บ Error ปั๊บเลย
ที่ผ่านมาเราพูดถึงคำสั่งที่ใช้ ประกาศค่า ลบค่าแล้ว อันนี้มาดู เงื่อนไข กันบ้าง
#ifndef แล้วตามด้วยชื่อค่าคงที่ มันจะเข้าไปเช็คว่า ชื่อของค่าคงที่ ที่เราพิมพ์ลงมามันมีจริงมั้ย ถ้าไม่มีมันก็จะทำตามคำสั่งข้างล่างที่เรากำหนดไว้เลย และสุดท้ายอย่าลืมเด็ดขาด มี if แล้วก็ต้องมี #endif ด้วยเสมอ

#ifndef MESSAGE
   #define MESSAGE "Hello World!"
#endif

จากตัวอย่างนี้ เราบอกว่า ถ้า MESSAGE ไม่เคยได้ถูกประกาศไว้ ก็ให้ลงมาประกาศค่าคงที่ ที่ชื่อว่า MESSAGE
if อีกตัวนั่นคือ #ifdef มันจะให้ผลตรงข้ามกับ #ifndef เลยนั่นคือ ถ้าค่าคงที่นั่นมีจริงก็ให้ทำข้างล่างได้เลย เช่น

#ifdef MESSAGE
   #undef MESSAGE
   #define MESSAGE = "Hello World!"
#endif

ลองมาอ่านโค๊ตตัวอย่างกัน ก่อนอื่น เราก็เช็คว่า ในโปรแกรมของเรา เราได้ประกาศค่าคงที่ชื่อ MESSAGE ไว้รึยังผ่านคำสั่ง #ifdef จากนั้น ถ้าเป็นจริง ให้มันลบค่าคงที่ MESSAGE ออก และสร้างค่าคงที่ชื่อ MESSAGE เหมือนเดิมลงไป เหมือนกับเราพยายามที่จะเปลี่ยนค่าของมันนั่นเอง
และนอกจาก #ifndef และ #ifdef ที่ใช้เช็คเงื่อนไขได้แล้ว เรายังสามารถใช้ #if ธรรมดาได้อีกด้วยนะ อันนี้ก็ if ตรง ๆ เลย แต่เราสามารถใช้มันร่วมกับคำสั่ง defined() ได้อีกด้วย เพื่อเอาไว้เช็คว่า ได้มีการประกาศค่าคงที่ ที่เราบอกไว้ในโปรแกรมของเรารึยังได้ด้วย

#if defined(MESSAGE)
   #undef MESSAGE
   #define MESSAGE = "Hello World!"
#endif

จริง ๆ มันจะมีเรื่อง Marco อยู่ด้วย แต่ไม่ขอพูดในที่นี้ล่ะกัน รู้สึกว่าถ้าพิมพ์แล้วเดี๋ยวมันจะยาวมาก ๆ เลยไม่พิมพ์ล่ะกัน สำหรับ Tutorial C Language 101 ก็ขอจบเพียงเท่านี้ล่ะกันครับ ถ้ามีอะไรอยากให้เขียนเพิ่มก็ลอง Comment เข้ามาในโพสของ Blog ล่ะกันครับ สำหรับวันนี้ สวัสดีครับ

Read Next...

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

เวลาเราทำงานกับข้อมูลอย่าง Pandas DataFrame หนึ่งในงานที่เราเขียนลงไปให้มันทำคือ การ Apply Function เข้าไป ถ้าข้อมูลมีขนาดเล็ก มันไม่มีปัญหาเท่าไหร่ แต่ถ้าข้อมูลของเราใหญ่ มันอีกเรื่องเลย ถ้าเราจะเขียนให้เร็วที่สุด เราจะทำได้โดยวิธีใดบ้าง วันนี้เรามาดูกัน...

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

ปั่นความเร็ว Python Script เกือบ 700 เท่าด้วย JIT บน Numba

Python เป็นภาษาที่เราใช้งานกันเยอะมาก ๆ เพราะความยืดหยุ่นของมัน แต่ปัญหาของมันก็เกิดจากข้อดีของมันนี่แหละ ทำให้เมื่อเราต้องการ Performance แต่ถ้าเราจะบอกว่า เราสามารถทำได้ดีทั้งคู่เลยละ จะเป็นยังไง เราขอแนะนำ Numba ที่ใช้งาน JIT บอกเลยว่า เร็วขึ้นแบบ 700 เท่าตอนที่ทดลองกันเลย...

Humanise the Number in Python with "Humanize"

Humanise the Number in Python with "Humanize"

หลายวันก่อน เราทำงานแล้วเราต้องการทำงานกับตัวเลขเพื่อให้มันอ่านได้ง่ายขึ้น จะมานั่งเขียนเองก็เสียเวลา เลยไปนั่งหา Library มาใช้ จนไปเจอ Humanize วันนี้เลยจะเอามาเล่าให้อ่านกันว่า มันทำอะไรได้ แล้วมันล่นเวลาการทำงานของเราได้ยังไง...

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

ทำไม 0.3 + 0.6 ถึงได้ 0.8999999 กับปัญหา Floating Point Approximation

การทำงานกับตัวเลขทศนิยมบนคอมพิวเตอร์มันมีความลับซ่อนอยู่ เราอาจจะเคยเจอเคสที่ เอา 0.3 + 0.6 แล้วมันได้ 0.899 ซ้ำไปเรื่อย ๆ ไม่ได้ 0.9 เพราะคอมพิวเตอร์ไม่ได้มองระบบทศนิยมเหมือนกับคนนั่นเอง บางตัวมันไม่สามารถเก็บได้ เลยจำเป็นจะต้องประมาณเอา เราเลยเรียกว่า Floating Point Approximation...