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

ตัวประมวลผลล่วงหน้า C++


ตัวประมวลผลล่วงหน้าคือคำสั่ง ซึ่งให้คำแนะนำแก่คอมไพเลอร์เพื่อประมวลผลข้อมูลล่วงหน้าก่อนเริ่มการรวบรวมจริง

คำสั่งตัวประมวลผลล่วงหน้า 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