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

Preprocessor C++: Bagaimana Direktif Membentuk Kode Anda

Preprocessor adalah direktif, yang memberikan instruksi ke compiler untuk memproses informasi sebelum kompilasi sebenarnya dimulai.

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

Anda sudah melihat direktif #include dalam semua contoh. Macro ini digunakan untuk menyertakan file header ke dalam file sumber.

Ada sejumlah direktif preprocessor yang didukung oleh C++ seperti #include, #define, #if, #else, #line, dll. Mari kita lihat direktif penting minus–

Preprocessor #define

Direktif preprocessor #define menciptakan konstanta simbolik. Konstanta simbolik disebut macro dan bentuk umum dari direktif adalah minus–

 #define nama-makro teks-pengganti 

Ketika baris ini muncul dalam file, semua kemunculan makro berikutnya dalam file tersebut akan diganti dengan teks-pengganti sebelum program dikompilasi. Contohnya minus–

 #include <iostream> using namespace std; #define PI 3.14159 int main () { cout << "Nilai PI :" << PI << endl; return 0; } 

Sekarang, mari kita lakukan preprocessing dari kode ini untuk melihat hasilnya asalkan kita memiliki file kode sumber. Jadi mari kita kompile dengan opsi -E dan alihkan hasilnya ke test.p. Sekarang, jika Anda memeriksa test.p, itu akan memiliki banyak informasi dan di bagian bawah, Anda akan menemukan nilai diganti sebagai berikut minus–

 $gcc -E test.cpp > test.p ... int main () { cout << "Nilai PI :" << 3.14159 << endl; return 0; } 

Macro Seperti Fungsi

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

Live Demo
 #include <iostream> using namespace std; #define MIN(a,b) (((a)<(b)) ? a : b) int main () { int i, j; i = 100; j = 30; cout <<"Nilai minimum adalah " << MIN(i, j) << endl; return 0; } 

Jika kita mengompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil berikut minus–

 Nilai minimum adalah 30 

Kompilasi Bersyarat

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

Konstruk preprocessor bersyarat sangat mirip dengan struktur seleksi ‘if’. Pertimbangkan kode preprocessor berikut minus–

 #ifndef NULL #define NULL 0 #endif 

Anda dapat mengompilasi program untuk tujuan debugging. Anda juga dapat menyalakan atau mematikan debugging menggunakan satu makro sebagai berikut minus–

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

Ini menyebabkan pernyataan cerr untuk dikompilasi dalam program jika konstanta simbolik DEBUG telah didefinisikan sebelum direktif #ifdef DEBUG. Anda dapat menggunakan #if 0 statment untuk mencopot bagian program sebagai berikut minus–

 #if 0 kode yang dicegah untuk dikompilasi #endif 

Mari kita coba contoh berikut minus–

Live Demo
 #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: Di dalam fungsi main" << endl; #endif #if 0 /* Ini adalah bagian yang dicopot */ cout << MKSTR(HELLO C++) << endl; #endif cout <<"Nilai minimum adalah " << MIN(i, j) << endl; #ifdef DEBUG cerr <<"Trace: Keluar dari fungsi main" << endl; #endif return 0; } 

Jika kita mengompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil berikut minus–

 Nilai minimum adalah 30 Trace: Di dalam fungsi main Trace: Keluar dari fungsi main 

Operator # dan ##

Operator # dan ## preprocessor tersedia dalam C++ dan ANSI/ISO C. Operator # menyebabkan token teks-pengganti dikonversi menjadi string yang dikelilingi tanda petik.

Pertimbangkan definisi makro berikut minus–

Live Demo
 #include <iostream> using namespace std; #define MKSTR( x ) #x int main () { cout << MKSTR(HELLO C++) << endl; return 0; } 

Jika kita mengompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil berikut minus–

 HELLO C++ 

Mari kita lihat bagaimana cara kerjanya. Mudah dipahami bahwa preprocessor C++ mengubah baris minus–

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

Baris di atas akan diubah menjadi baris berikut minus–

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

Operator ## digunakan untuk menggabungkan dua token. Berikut adalah contoh minus–

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

Ketika CONCAT muncul dalam program, argumennya digabungkan dan digunakan untuk menggantikan makro. Contohnya, CONCAT(HELLO, C++) digantikan oleh "HELLO C++" dalam program sebagai berikut.

Live Demo
 #include <iostream> using namespace std; #define concat(a, b) a ## b int main() { int xy = 100; cout << concat(x, y); return 0; } 

Jika kita mengompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil berikut minus–

 100 

Mari kita lihat bagaimana cara kerjanya. Mudah dipahami bahwa preprocessor C++ mentransformasi minus–

 cout << concat(x, y); 

Baris di atas akan ditransformasikan menjadi baris berikut minus–

 cout << xy; 

Makro Bawaan C++

C++ menyediakan sejumlah makro bawaan yang disebutkan di bawah minus–

No.Urut Makro & Deskripsi
1

__LINE__

Ini berisi nomor baris saat ini dari program saat dikompilasi.

2

__FILE__

Ini berisi nama file saat ini dari program saat dikompilasi.

3

__DATE__

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

4

__TIME__

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

Mari kita lihat contoh untuk semua makro di atas minus–

Live Demo
 #include <iostream> using namespace std; int main () { cout << "Nilai __LINE__ : " << __LINE__ << endl; cout << "Nilai __FILE__ : " << __FILE__ << endl; cout << "Nilai __DATE__ : " << __DATE__ << endl; cout << "Nilai __TIME__ : " << __TIME__ << endl; return 0; } 

Jika kita mengompilasi dan menjalankan kode di atas, ini akan menghasilkan hasil berikut minus–

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

Bahasa C

  1. Menguasai Direktif Preprosesor C#: Panduan Praktis
  2. Memahami Tipe Data C++: Dasar, Modifikasi, dan Praktik Terbaik
  3. Menguasai Operator C++: Panduan Lengkap dengan Contoh Praktis
  4. Komentar C++: Praktik Terbaik untuk Kode yang Mudah Dibaca dan Dipelihara
  5. Memahami Konstruktor C++: Default, Parameterized, dan Copy Dijelaskan
  6. Menguasai Template Kelas C++: Panduan Praktis
  7. Memahami Preprocessor C (CPP): Bagaimana Ini Mengompilasi
  8. Bahasa Pemrograman C++: Tinjauan & Fitur Utama
  9. Konstanta & Literal C++ Dijelaskan: Tipe, Sintaks, dan Praktik Terbaik
  10. Panduan Lengkap Operator C++: Tipe, Penggunaan, dan Praktik Terbaik