ที่นี่เราจะดูว่าตัวประมวลผลล่วงหน้าทำงานอย่างไรใน C หรือ C ++ มาดูกันว่าตัวประมวลผลล่วงหน้าคืออะไร
ตัวประมวลผลล่วงหน้าคือคำสั่ง ซึ่งให้คำแนะนำแก่คอมไพเลอร์เพื่อประมวลผลข้อมูลล่วงหน้าก่อนการคอมไพล์จริงจะเริ่มขึ้น
คำสั่งตัวประมวลผลล่วงหน้าทั้งหมดขึ้นต้นด้วย # และเฉพาะอักขระช่องว่างเท่านั้นอาจปรากฏขึ้นก่อนคำสั่งตัวประมวลผลล่วงหน้าในบรรทัด คำสั่งตัวประมวลผลล่วงหน้าไม่ใช่คำสั่ง 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