Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวประมวลผลล่วงหน้าทำงานอย่างไรใน C/C++


ที่นี่เราจะดูว่าตัวประมวลผลล่วงหน้าทำงานอย่างไรใน 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