Minggu, Juni 28, 2020

Preprosesor direktif bahasa C dan C++ lanjutan

Direktif preprosesor: Pada hampir setiap program pada bahasa C dan C++, dapat ditemukan beberapa baris pada bagian atas dari program yang diawali dengan tanda '#'. Baris tersebut akan dilakukan preprosesing oleh kompilator sebelum kompilasi aktual dimulai. Pada bagian akhir dari baris diidentifikasi oleh karakter baris baru '\n' dan tidak ada semicolon ';' yang diperlukan untuk mengakhiri perintah pada baris tersebut. 

Direktif preprosesor umumnya digunakan untuk mendefinisikan makro dan evaluasi kondisional statement, include file sumber, direktif pragma, kontrol baris, deteksi error, dan lain sebagainya.

Pada bagian ini akan dibahas beberapa tipe dari direktif preprosesor seperti diperlihatkan sebagai berikut:
satu, Kompilasi kondisional
dua, Line kontrol
tiga, Direktif error

Selanjutnya adalah perhatikan setiap direktif tersebut secara lebih detail:
satu, Kompilasi Kondisional: Direktif kompilasi kondisional membantu untuk mengkompilasi porsi spesifik dari program atau melewati kompilasi dari bagian khusus dari program berdasarkan kondisi tertentu. Pada materi direktif preprosesor sebelumnya, telah dibahas tentang dua tipe direktif 'ifdef' dan 'endif'. Pada materi kali ini akan dibahas #ifndef, #if, #else, dan #elif.

#ifdef: Direktif ini adalah jenis direktif dengan kondisi paling sederhana. Block ini disebut dengan grup kondisional. Teks yang dikontrol akan dimasukkan dalam output preprocessor jika macroname didefinisikan. teks kontrol yang terdapat dalam kondisional akan merangkul direktif preprosesor, dan hanya akan dieksekusi ketika kondisi telah terpenuhi. Direktif ini dapat ditempatkan pada multiple layer, tetapi harus dalam kondisi bersarang penuh. Dengan kata lain, ‘#endif’ harus selalu cocok dengan ‘#ifdef ' terdekat (atau‘ #ifndef ’, atau‘ #if ’). 

Sintak:
#ifdef MACRO
    controlled text
#endif /* macroname */

#ifndef: Diketahui bahwa pada direktif #ifdef jika macroname telah didefinisikan, maka blok dari statement mengikuti direktif #ifdef akan dieksekusi secara normal tetapi jika tidak maka kompilator akan secara sederhana melewati blok statement tersebut. Direktif #ifndef secara sederhana berlawanan dengan direktif #ifdef. Pada kondisi #ifndef, blok statement antara #ifndef dan #endif akan dieksekusi hanya jika makro dari identifier dengan #ifndef tidak didefinisikan.

Sintak:
ifndef macro_name
    statement1;
    statement2;
    statement3;
    .
    .
    .
    statementN;
endif

Jika makro dengan nama 'macroname' tidak didefinisikan menggunakan direktif #define maka hanya blok statement saja yang akan dieksekusi.

#if, #else, dan #elif: Direktif tersebut bekerja bersamaan dan mengendalikan ukuran dari kompilasi dari program menggunakan beberapa pengkondisian. Jika kondisi dengan direktif #if dievaluasi ke nilai non zero, maka kelompok dari baris akan dieksekusi secepatnya setelah direktif #if dieksekusi, juga jika kondisi dengan direktif #elif dievaluasi ke nilai non zero, maka kelompok dari direktif akan segera dieksekusi telah direktif #elif dieksekusi jika tidak maka direktif #else akan dieksekusi setelahnya.

Sintak:
#if macro_condition
   statements
#elif macro_condition
   statements
#else
   statements
#endif

Contoh:

Output:
50

Perhatikan bahwa semua struktur dari direktif #if, #elif, dan #else saling berkaitan dan diakhiri dengan #endif.

dua, Line Control (#line): Dimanapun ketika melakukan kompilasi program, selalu terdapat kemungkinan dari ketidaktepatan dari beberapa program error. Dimanapun identifier kompilator mengalami error dalam program maka akan disediakan nama file yang ditemukan error bersamaan dengan daftar baris dari angka pasti dimana posisi dari baris error tersebut berada. Hal ini akan mempermudah proses pencarian error.

Namun Demikian programmer dapat mengendalikan informasi mana yang harus disediakan oleh kompilator selama error terjadi pada saat proses kompilasi program menggunakan direktif #line.

Sintak:
#line number "filename"

Tiga, Error direktif (#error): Direktif ini membatalkan proses kompilasi ketika ditemukan program mengalami error yang bersifat optional dan secara khusus dapat dipergunakan sebagai parameter.

Sintak:
#error optional_error

Berikut, optional_error yang ditentukan oleh user terhadap jenis error tertentu dan akan ditampilan ketika menemukan program error.

Contoh:
#ifndef GeeksforGeeks 
#error GeeksforGeeks not found ! 
#endif 

Output:
error: #error GeeksforGeeks not found !

Sumber Referensi:
ppd_better_practice_cs.auckland.ac.nz
http://www.cplusplus.com/doc/tutorial/preprocessor/





Related Posts

Preprosesor direktif bahasa C dan C++ lanjutan
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "