Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

C++ Preprosesor

Preprocessors adalah direktif, yang memberikan instruksi kepada compiler untuk memproses informasi sebelum kompilasi sebenarnya dimulai.

Semua direktif praprosesor dimulai dengan #, dan hanya karakter spasi putih yang dapat muncul sebelum direktif praprosesor pada sebuah baris. Direktif preprosesor bukan pernyataan C++, jadi tidak diakhiri dengan titik koma (;).

Anda telah melihat #include direktif dalam semua contoh. Makro ini digunakan untuk memasukkan file header ke dalam file sumber.

Ada beberapa directive preprocessor yang didukung oleh C++ seperti #include, #define, #if, #else, #line, dll. Mari kita lihat directive penting −

Preprosesor #define

Direktif #define preprocessor membuat konstanta simbolis. Konstanta simbolis disebut makro dan bentuk umum direktifnya adalah

#define macro-name replacement-text 

Ketika baris ini muncul di file, semua kemunculan makro berikutnya dalam file itu akan diganti dengan teks pengganti sebelum program dikompilasi. Misalnya

#include <iostream>
using namespace std;

#define PI 3.14159

int main () {
   cout << "Value of PI :" << PI << endl; 

   return 0;
}

Sekarang, mari kita lakukan preprocessing kode ini untuk melihat hasilnya dengan asumsi kita memiliki file kode sumber. Jadi mari kita kompilasi dengan opsi -E dan arahkan hasilnya ke test.p. Sekarang, jika Anda memeriksa test.p, itu akan memiliki banyak informasi dan di bagian bawah, Anda akan menemukan nilainya diganti sebagai berikut −

$gcc -E test.cpp > test.p

...
int main () {
   cout << "Value of PI :" << 3.14159 << endl; 
   return 0;
}

Makro Seperti Fungsi

Anda dapat menggunakan #define untuk mendefinisikan makro yang akan mengambil argumen sebagai berikut −

Demo Langsung
#include <iostream>
using namespace std;

#define MIN(a,b) (((a)<(b)) ? a : b)

int main () {
   int i, j;
   
   i = 100;
   j = 30;
   
   cout <<"The minimum is " << MIN(i, j) << endl;

   return 0;
}

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut

The minimum is 30

Kompilasi Bersyarat

Ada beberapa arahan, yang dapat digunakan untuk mengkompilasi bagian selektif dari kode sumber program Anda. Proses ini disebut kompilasi bersyarat.

Konstruksi praprosesor bersyarat sangat mirip dengan struktur pemilihan 'jika'. Perhatikan kode preprocessor berikut

#ifndef NULL
   #define NULL 0
#endif

Anda dapat mengkompilasi program untuk tujuan debugging. Anda juga dapat mengaktifkan atau menonaktifkan debugging menggunakan makro tunggal sebagai berikut −

#ifdef DEBUG
   cerr <<"Variable x = " << x << endl;
#endif

Hal ini menyebabkan cerr pernyataan yang akan dikompilasi dalam program jika konstanta simbolis DEBUG telah didefinisikan sebelum direktif #ifdef DEBUG. Anda dapat menggunakan pernyataan #if 0 untuk mengomentari sebagian program sebagai berikut −

#if 0
   code prevented from compiling
#endif

Mari kita coba contoh berikut

Demo Langsung
#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;
}

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut

The minimum is 30
Trace: Inside main function
Trace: Coming out of main function

Operator # dan ##

Operator praprosesor # dan ## tersedia di C++ dan ANSI/ISO C. Operator # menyebabkan token teks pengganti dikonversi menjadi string yang dikelilingi oleh tanda kutip.

Perhatikan definisi makro berikut

Demo Langsung
#include <iostream>
using namespace std;

#define MKSTR( x ) #x

int main () {

   cout << MKSTR(HELLO C++) << endl;

   return 0;
}

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut

HELLO C++

Mari kita lihat cara kerjanya. Sangat mudah untuk memahami bahwa preprocessor C++ mengubah garis −

cout << MKSTR(HELLO C++) << endl;

Baris di atas akan diubah menjadi baris berikut

cout << "HELLO C++" << endl;

Operator ## digunakan untuk menggabungkan dua token. Ini contohnya

#define CONCAT( x, y )  x ## y

Ketika CONCAT muncul di program, argumennya digabungkan dan digunakan untuk menggantikan makro. Misalnya, CONCAT(HELLO, C++) diganti dengan "HELLO C++" dalam program sebagai berikut.

Demo Langsung
#include <iostream>
using namespace std;

#define concat(a, b) a ## b
int main() {
   int xy = 100;
   
   cout << concat(x, y);
   return 0;
}

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut

100

Mari kita lihat cara kerjanya. Mudah dipahami bahwa preprosesor C++ mengubah

cout << concat(x, y);

Baris di atas akan diubah menjadi baris berikut

cout << xy;

Makro C++ yang telah ditentukan sebelumnya

C++ menyediakan sejumlah makro standar yang disebutkan di bawah ini −

No.No Makro &Deskripsi
1

__LINE__

Ini berisi nomor baris program saat ini ketika sedang dikompilasi.

2

__FILE__

Ini berisi nama file program saat ini ketika sedang dikompilasi.

3

__DATE__

Ini berisi string formulir bulan/hari/tahun yang merupakan tanggal terjemahan file sumber menjadi kode objek.

4

__TIME__

Ini berisi string dalam bentuk jam:menit:detik yang merupakan waktu saat program dikompilasi.

Mari kita lihat contoh untuk semua makro di atas

Demo Langsung
#include <iostream>
using namespace std;

int main () {
   cout << "Value of __LINE__ : " << __LINE__ << endl;
   cout << "Value of __FILE__ : " << __FILE__ << endl;
   cout << "Value of __DATE__ : " << __DATE__ << endl;
   cout << "Value of __TIME__ : " << __TIME__ << endl;

   return 0;
}

Jika kita mengkompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil sebagai berikut

Value of __LINE__ : 6
Value of __FILE__ : test.cpp
Value of __DATE__ : Feb 28 2011
Value of __TIME__ : 18:52:48

Bahasa C

  1. Arahan C# Preprocessor
  2. Tipe Data C++
  3. Operator C++
  4. Komentar C++
  5. Konstruktor C++
  6. Template Kelas C++
  7. C - Praprosesor
  8. Ikhtisar C++
  9. Konstanta/Literal C++
  10. Operator di C++