Preprocessor directives

Preprocessor directives เป็นบรรทัดคำสั่งในโปรแกรมที่จะถูกประมวลผลก่อนที่คอมไพล์เลอร์จะทำงาน มันทำงานโดย preprocessor และคำสั่งเหล่านี้จะต้องใส่เครื่องหมาย (#) นำหน้า ข้อแตกต่างจากคำสั่งปกติคือมันจะไม่มีเซมิโคลอน (;) หลังจากคำสั่ง เพราะว่ามันใช้การขึ้นบรรทัดใหม่เป็นตัวบ่งบอก แต่ถ้าเราต้องการให้มันอยู่ในบรรทัดเดียวกัน เราสามารถใช้เครื่องหมายขึ้นบนนทัดใหม่ได้ (/).

macro definitions (#define, #undef)

Marco definitions เป็นชุดของคำสั่งที่ใช้คำสั่ง define และ undef มีรูปแบบคือ:

#define identifier replacement

คำสั่งนี้ในแทนที่โค้ดของโปรแกรมที่ปรากฏเหมือน identifier และถ้าพบมันจะแทนที่โค้ดนั้นด้วย replacement ตัวอย่างเช่น:

#define SIZE 10
int number[SIZE];
int x = SIZE;

สังเกตุว่าคำสั่งนี้ไม่มีเซมิโคลอน และเราเห็นว่า SIZE นั้นเป็น identifier ของคำสั่งนี้ และ 10 เป็น replacement โดยมันจะค้นหาทุกโค้ดในโปรแกรมสำหรับ "SIZE" และแทนที่ด้วย "10" ดังนั้นโค้ดข้างบนจึงมีค่าเหมือนกันกับโค้ดต่อไปนี้

int number[10];
int x = 10;

เราสามารถยกเลิก (undefine) directives ใดๆ ที่เราสร้างไปโดยการใช้คำสั่ง undef ของ macro ตัวอย่างเช่น

#undef SIZE

Conditional inclusions (#ifdef, #ifndef, #if, #endif, #else and #elif)

Conditional inclusions เป็นคำสั่งที่ถูกใช้เพื่อตรวจสอบว่า macro directives ได้ถูกสร้างก่อนหน้านี้แล้วหรือไม่ และไม่สำคัญไม่ว่าค่ามันจะเป็นอะไร

#ifdef ใช้เพื่อตรวจสอบ marco identifier ที่ระบุ ถ้ามันถูกสร้างไว้ก่อนหน้า ถ้าเป็นจริงมันจะอนุญาติให้ส่วนของโค้ดคอมไพลืได้ ถ้าไม่ใช่มันจะข้ามการคอมไพล์โค้ดส่วนนั้นไป ส่วนของโค้ดของคำสั่งหรือบล็อคคำสั่งของ directive จะจบด้วย #endif

#define SIZE 100
#ifdef SIZE
int number[SIZE];
#endif;

และตรงข้ามกลับ #ifdef คือ #ifndef คำสั่งนี้จะตรวจสอบถ้า marco ไม่ได้ถูกสร้างก่อนหน้า ถ้าเป็นจริงมันจะอนุญาติให้ส่วนของโค้ดคอมไพล์ ถ้าไม่มันจะข้ามไป

#ifndef SIZE
#define SIZE 100
#endif;

คำสั่ง #if, #endif, #else และ #elif เพื่อที่จะตรวจสอบเงื่อนไขบางอย่างกับ marco โดยที่ expression สามารถที่จะเปรียบเทียบกับค่าคงที่ได้ มันทำงานเหมือนคำสั่ง if , else และ else ที่เราได้เรียนไปก่อนหน้านี้แล้ว

#if SIZE>100
#undef SIZE
#define SIZE 200

#elif SIZE<50
#undef SIZE
#define SIZE 50

#else
#undef SIZE
#define SIZE 100
#endif

int myarray[SIZE];

Line control (#line)

#line directive เป็นคำสั่งที่อนุญาติให้เราสามารถควบคุมว่าโปรแกรมจะแสดงข้อผิดพลาดอย่างไร โดยปกติ เมื่อมีข้อผิดพลาดเกิดขึ้นขณะการคอมไพล์ของโปรแกรม มันจะแสดงชื่อของไฟล์และบรรทัดที่ทำให้เกิดข้อผิดพลาดนั้น ดังนั้นเราสามารถเปลี่ยนชื่อไฟล์และบรรทัดที่เราต้องการจะให้มันแสดง รูปแบบของมันคือ:

 #line number "filename"

โดย number เป็นหมายเลขของบรรทัดที่อยู่ใต้คำสั่งนี้ และมันจะนับต่อจากบรรทัดนี้เพื่อให้สิ้นสุดไฟล์ ตัวอย่างเช่น:

#line 100 "my file name"
int n=;

Error directive (#error)

Error directive ถูกใช้เพื่อหยุดการคอมไพลืในบางโอกาศ มันมักจะถูกใช้กับ conditional directives ถ้ามีเงื่อนไขที่ตรง

#ifndef SIZE
#error A macro SIZE must define to run the program!
#endif

Source file inclusion (#include)

source file inclusion directive ถูกใช้เพื่อนำเข้า header หรือไฟล์มายังไฟล์โปรแกรมปัจจุบัน คุณได้เห็นไปแล้วในบทก่อนหน้าของบทเรียนนี้ รูปแบบของมันคือ:

#include <header>
#include "filename"

#include directive จะแทนที่บรรทัดนั้นกับ header หรือไฟล์ที่เรานำเข้ามา โดยไฟล์ header จะต้องอยู่ในโฟล์เดอร์ของ header ไฟล์

#include <iostream>
#include "myheader.h"

ในตัวอย่างนี้ คุณได้เห็นแล้วหลายครั้ง โดยอันแรกจะปิดด้วย <> นั่นหมายถึงไลบรารี่มาตรฐานของ iostream และอีกอันหนึ่งจะล้อมรอบด้วยเครื่องหมาย "" (double quote) ซึ่งเป็นไฟล์ header ที่เราสามารถสร้างขึ้นมาเอง เพื่อให้ในสถานการณ์ที่เหมาะสมได้


บทความเกี่ยวกับ Preprocessor directives

Preprocessor directives ในภาษา C

Preprocessor directives เป็นบรรทัดของโปรแกรมที่จะถูกประมวลผลโดย processor ก่อนที่โปรแกรมจะได้รับการคอมไพล์ โดยชุดคำสั่งนั้นจะขึ้นต้นด้วยเครื่องหมาย hash (#) ข้อ...

Preprocessor directives ในภาษา C#

Preprocessor directives เป็นคำสั่งของโปรแกรมที่ประมวลผลในตอนที่คอมไพเลอร์เริ่มต้นทำงาน ซึ่งมันทำงานโดย preprocessor และก่อนที่โปรแกรมจะสร้าง executable file ที่...

Directives ในภาษา Visual Basic

Directives คือชุดคำสั่งที่ประมวลผลโดย Preprocessor ก่อนที่โปรแกรมจะทำการคอมไพล์ หรือในบางทีเรียกว่า Preprocessor Directives มันเป็นชุดคำสั่งสำหรับควบคุมการทำงา...