Preprocessor directives เป็นบรรทัดคำสั่งในโปรแกรมที่จะถูกประมวลผลก่อนที่คอมไพล์เลอร์จะทำงาน มันทำงานโดย preprocessor
และคำสั่งเหล่านี้จะต้องใส่เครื่องหมาย (#) นำหน้า
ข้อแตกต่างจากคำสั่งปกติคือมันจะไม่มีเซมิโคลอน (;) หลังจากคำสั่ง
เพราะว่ามันใช้การขึ้นบรรทัดใหม่เป็นตัวบ่งบอก
แต่ถ้าเราต้องการให้มันอยู่ในบรรทัดเดียวกัน
เราสามารถใช้เครื่องหมายขึ้นบนนทัดใหม่ได้ (/).
#ifdef ใช้เพื่อตรวจสอบ marco identifier ที่ระบุ ถ้ามันถูกสร้างไว้ก่อนหน้า ถ้าเป็นจริงมันจะอนุญาติให้ส่วนของโค้ดคอมไพลืได้ ถ้าไม่ใช่มันจะข้ามการคอมไพล์โค้ดส่วนนั้นไป ส่วนของโค้ดของคำสั่งหรือบล็อคคำสั่งของ directive จะจบด้วย #endif
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 ที่เราสามารถสร้างขึ้นมาเอง เพื่อให้ในสถานการณ์ที่เหมาะสมได้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น