วันอังคารที่ 16 สิงหาคม พ.ศ. 2559

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 ที่เราสามารถสร้างขึ้นมาเอง เพื่อให้ในสถานการณ์ที่เหมาะสมได้

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...