Minggu, Juni 28, 2020

Preprosessor direktif bahasa C dan C++

Seperti namanya, preprosesor adalah program yang memproses kode sumber sebelum dilakukan kompilasi. Terdapat beberapa urutan yang dilibatkan antara penulisan program dan eksekusi program pada bahasa C dan C++. Perhatikan gambar 1 berikut ini sebelum memulai melanjutkan mempelajari materi.

preprosesor direktif
Gambar 1 preprosesor direktif bahasa C

Dapat dilihat pada pertengahan tahap pada program. Kode program yang ditulis oleh programmer disimpan pada file program.c. File tersebut kemudian diproses oleh preprosesor dan kode sumber file diperluas dan dihasilkan beserta nama program. Perluasan file ini dikompilasi oleh kompilator dan file kode objek yang dihasilkan dengan nama .obj. Linker menghubungkan objek kode file ke objek kode dari fungsi pustaka untuk generate file yang akan dieksekusi atau executable file .exe.

Preprosesor program menyediakan direktif preprosesor yang memberi tahu kompilator untuk melakukan preprosesing kode sumber sebelum dilakukan kompilasi. Semua tahap dari direktif preprosesor diawali dengan simbol '#'. Jadi segala statement yang diawali dengan '#' adalah preprosesor program, dan preprosesor akan mengeksekusi program pada statement ini. Contoh dari beberapa direktif preprosesor adalah : #include, #define, #ifndef, dan lain sebagainya. Perlu diingat bahwa, simbol # hanya menyediakan path atau jalur yang akan menuju ke preprosesor dan memerintahkan untuk include proses oleh preprosesor program. Contoh, include akan menambahkan kode tambahan pada program. Pada direktif preprosesor dapat ditempatkan direktif preprosesor pada bagian apapaun pada program.

Terdapat empat tipe utama dari direktif preprosesor:

satu, makro.
dua, File inklusi.
tiga, Conditional Compilation
empat, Direktif bentuk lainnya

Mari mempelajari beberapa bentuk direktif tersebut secara lebih detail.

satu, Makro: adalah bagian dari kode program yang diberi beberapa nama. Dimanapun nama ini ditemui oleh kompilator, kompilator akan mengganti nama tersebut dengan potongan kode sebenarnya. Direktif '#define' digunakan untuk mendefinisikan sebuah makro. Mari pahami definisi makro melalui contoh program berikut ini.

Pada bahasa C

Pada bahasa C++

Output:
0
1
2
3
4

Pada program, ketika kompilator mengeksekusi kata LIMIT, maka kata tersebut akan diganti dengan 5. Kata 'LIMIT' pada definisi makro disebut sebagai template makro dan '5' adalah perluasan makro atau macro expansion.

Catatan: Tidak terdapat semicolon ';' pada akhir dari definisi makro. Definisi makro tidak membutuhkan sebuah semicolon pada bagian akhirnya.

Makro dengan argumen: Dapat juga melewatkan makro pada argumen. Makro didefinsikan dengan argumen yang bekerja sama seperti fungsi. Mari pahami penjelasan tersebut dengan menggunakan contoh program:

Pada bahasa C:

Pada bahasa C++

Output:
Area of rectangle is: 50

Dapat diperhatikan pada contoh program sebelumnya, dimanapun kompilator menemukan AREA(l,b) pada program, maka hal tersebut akan diganti dengan statement (l*b). Tidak hanya itu, nilai yang dilewatkan menuju template makro AREA(l,b) juga akan diganti dalam statement (l*b). Karena itu AREA(10,5) akan setara 10*5.

Dua, File inklusi: Tipe direktif dari preprosesor ini memberitahukan kompilator untuk mengambil sebuah file dalam kode sumber program. Terdapat dua tipe file yang dapat dimasukkan oleh user pada program yaitu:

Header File atau file standar: File tersebut mengandung definisi dari predefinisi fungsi seperti printf(), scanf(), dan lain sebagainya. File tersebut harus dimasukkan untuk dapat bekerja dengan fungsinya. Fungsi berbeda juga memerlukan pendeklarasian berbeda dari header file. Contoh standar fungsi I/O pada file 'iostream' dimana fungsi akan menampilkan operasi string dalam file 'string'.

Sintak:
#include< file_name >

File definisi user: Ketika ukuran file menjadi sangat besar, akan lebih baik jika file tersebut dibagi menjadi beberapa file yang lebih kecil. Tipe dari file tersebut adalah file definisi user atau user defined file. File tersebut dapat didefinsikan sebagai berikut :

#include"filename"

tiga, Kompilasi kondisional: Direktif kompilasi kondisional adalah tipe data direktif yang membantu mengkompilasi spesifik porsi dari program atau melewati kompilasi dari bagian spesifik dari program berdasarkan kondisi tertentu. Hal ini dapat dilakukan dengan bantuan dari dua perintah preprosesor 'ifdef' dan 'endif'.

Sintak:
#ifdef macro_name
    statement1;
    statement2;
    statement3;
    .
    .
    .
    statementN;
#endif

Jika makro dengan nama seperti 'macroname' telah didefinsikan maka blok statement, maka makrto akan dieksekusi normal. Tetapi jika tidak didefinisikan, maka kompilator secara sederhana akan melewati blok dari statement tersebut.

empat, direktif lainnya: Selain ketiga direktif yang telah dijelaskan sebelumnya terdapat dua direktif yang tidak umum dipakai pada program. Yaitu:

Direktif #undef: direktif #undef digunakan untuk pembatalan definisi dari makro. Direktif ini bekerja sebagai berikut:

#undef LIMIT

Dengan menggunakan statement ini maka dapat dilakukan undefinisi dari makro LIMIT yang sudah ada. Selanjutnya, maka setiap statement "ifdef LIMIT" akan dievaluasi untuk berubah menjadi nilai false.

Direktif #pragma: Direktif ini adalah direktif khusus dan digunakan untuk menyalakan dan mematikan beberapa fitur. Tipe direktif ini adalah compiler-spesific, atau direktif ini penggunaannya bervariasi antara satu kompilator dengan kompilator lainnya. Beberapa direktif #pragma akan didiskusikan sebagai berikut:

#pragma starup dan #pragma exit: Direktif ini membantu untuk menentukan fungsi yang dibutuhkan untuk dijalankan sebelum program dimulai dan sesaat sebelum program berakhir. 

catatan: Program berikut tidak dapat bekerja dengan kompilator GCC.

Output:
Inside func1()
Inside main()
Inside func2()

Jika dijalankan dengan kompilator GCC maka akan menghasilkan output program seperti berikut ini:

Inside main()

Hal ini terjadi karena GCC tidak mendukung #pragma startup dan #pragma exit. Namun, dapat juga dipergunakan contoh kode program berikut untuk output pada kompilator GCC.


Direktir #pragma warn: Direktif ini digunakan untuk menyembunyikan pesan peringatan yang ditampilkan selama proses kompilasi seperti diperlihatkan sebagai berikut:

#pragma warn -rvl: direktif akan menyembunyikan peringatan warning yang akan muncul ketika sebuah fungsi memberikan nilai yang tidak seharusnya seperti yang dirancang pada program.

#pragma warn -par: direktif akan menyembunyikan peringatan warning yang akan muncul ketika fungsi tidak menggunakan paramter yang dilewatkan kepada fungsi tersebut.

#pragma warn -rch: direktif akan menyembunyikan peringatan warning yang akan muncul ketika kode program unreacheable atau tidak dapat dijangkau. Contoh: Kode program yang dibuat setelah statement return pada fungsi adalah salah satu contoh kode yang tidak dapat dijangkau oleh program.





Related Posts

Preprosessor direktif bahasa C dan C++
Oleh

mohon untuk melakukan koreksi jika terdapat kesalahan pada penulisan blog ini,