ตัวประมวลผลล่วงหน้าคือคำสั่ง ซึ่งให้คำแนะนำแก่คอมไพเลอร์เพื่อประมวลผลข้อมูลล่วงหน้าก่อนเริ่มการรวบรวมจริง
คำสั่งตัวประมวลผลล่วงหน้า pAll เริ่มต้นด้วย # และมีเพียงอักขระช่องว่างเท่านั้นอาจปรากฏขึ้นก่อนคำสั่งตัวประมวลผลล่วงหน้าในบรรทัด คำสั่งตัวประมวลผลล่วงหน้าไม่ใช่คำสั่ง C++ ดังนั้นจึงไม่ได้ลงท้ายด้วยเครื่องหมายอัฒภาค (;)
คุณได้เห็น #include คำสั่งในตัวอย่างทั้งหมดแล้ว มาโครนี้ใช้เพื่อรวมไฟล์ส่วนหัวลงในไฟล์ต้นฉบับ
มีคำสั่งล่วงหน้าจำนวนหนึ่งที่สนับสนุนโดย C++ เช่น #include, #define, #if, #else, #line เป็นต้น ให้เราดูคำสั่งที่สำคัญ -
ตัวประมวลผลล่วงหน้า #define
คำสั่ง #define ตัวประมวลผลล่วงหน้าจะสร้างค่าคงที่เชิงสัญลักษณ์ ค่าคงที่สัญลักษณ์เรียกว่า มาโคร และรูปแบบทั่วไปของคำสั่งคือ −
#define macro-name replacement-text
โค้ดตัวอย่าง
#include <iostream> using namespace std; #define PI 3.14159 int main () { cout << "Value of PI :" << PI << endl; return 0; }
ผลลัพธ์
Value of PI :3.14159
การรวบรวมตามเงื่อนไข
มีคำสั่งหลายอย่าง ซึ่งสามารถใช้เพื่อรวบรวมส่วนที่เลือกสรรของซอร์สโค้ดของโปรแกรมของคุณ กระบวนการนี้เรียกว่าการคอมไพล์แบบมีเงื่อนไข
โครงสร้างตัวประมวลผลล่วงหน้าแบบมีเงื่อนไขเหมือนกับโครงสร้างการเลือก 'ถ้า' พิจารณารหัสตัวประมวลผลล่วงหน้าต่อไปนี้ -
#ifndef NULL #define NULL 0 #endif
คุณสามารถคอมไพล์โปรแกรมเพื่อจุดประสงค์ในการดีบัก คุณยังสามารถเปิดหรือปิดการดีบักโดยใช้มาโครเดียวได้ดังนี้ -
#ifdef DEBUG cerr <<"Variable x = " << x << endl; #endif
สิ่งนี้ทำให้คำสั่ง cerr ถูกคอมไพล์ในโปรแกรม ถ้าค่าคงที่สัญลักษณ์ DEBUG ถูกกำหนดไว้ก่อน directive #ifdef DEBUG คุณสามารถใช้คำสั่ง #if 0 เพื่อแสดงความคิดเห็นในส่วนของโปรแกรมได้ดังนี้ -
#if 0 code prevented from compiling #endif
โค้ดตัวอย่าง
#include <iostream> using namespace std; #define DEBUG #define MIN(a,b) (((a)<(b)) ? a : b) int main () { int i, j; i = 100; j = 30; #ifdef DEBUG cerr <<"Trace: Inside main function" << endl; #endif #if 0 /* This is commented part */ cout << MKSTR(HELLO C++) << endl; #endif cout <<"The minimum is " << MIN(i, j) << endl; #ifdef DEBUG cerr <<"Trace: Coming out of main function" << endl; #endif return 0; }
ผลลัพธ์
Trace: Inside main function The minimum is 30 Trace: Coming out of main function