Selasa, November 05, 2019

Macros dan preprocessor pada bahasa C

Pada bahasa C, semua baris dimulai dengan tanda # yang diproses oleh preprocessor yang merupakan program khusus yang dipanggil oleh compiler. Pada pengertian dasar, preprocessor mengambil sebuah program C dan menghasilkan program C lainnya tanpa memiliki tanda #. Berikut ini beberapa fakta menarik tentang preprocessor pada bahasa C.

satu, Ketika menggunakan direktif include, konten dari header file akan digandakan menuju file yang saat ini digunakan. Tanda "< >" menginstruksikan preprosessor untuk melihat ke dalam folder standar dimana semua file header berada. Tanda petik "" menginstruksikan preprosessor untuk melihat ke folder saat ini atau direktor saat ini.

dua, Ketika menggunakan define untuk konstanta, preprocessor akan memproduksi program C dimana konstanta didefinisikan akan dicari dan dicocokkan dengan ekpresi yang digunakan sebagai pengganti. Contoh pada program max yang didefinisikan sebagai 100.

Output:
max is 100

tiga, Macro juga digunakan sebagai fungsi seperti argument, dimana argument tidak diperiksa untuk tipe data. Contohnya, macro INCREMENT(X) yang dapat digunakan untuk x dengan tipe data apapun.

Output:
eeksQuiz 11

empat, Argument macro tidak dievaluasi sebelum macro ekspansi. Contohnya, perhatikan program berikut ini:

Output:
16

Permasalahan yang tejadi pada program sebelumnya dapat diselesaikan dengan cara berikut ini:

Output:
40

lima, Token yang diteruskan ke macro dapat digabungkan menggunakan operator ## yang disebut operator Token-Pasting.

Output:
1234

enam, Sebuah token yang dilewatkan menuju macro dapat dikonversi menjadi sebuah string literal dengan menggunakan #.

Output:
GeeksQuiz

tujuh, Macro dapat dideklarasikan pada multiple baris dengan menggunakan tanda ". Baris terakhir tidak memerlukan tanda ".

Output:
GeekQuiz GeekQuiz GeekQuiz

delapan, Macro dengan argument harus dihindari penggunaannya karena sering menyebabkan error. Serta, fungsi inline bisa lebih sering digunakan karena ada evaluasi tipe parameter checking dalam fungsi inline. Dari tipe C99 dan seterusnya, fungsi inline telah didukung penggunaannya oleh bahasa C. Contohnya, perhatikan program berikut ini. Jika dilihat sekilas hasil output adalah 1, tetapi hasil yang dikeluarkan adalah 36.

Output:
36

Jika menggunakan fungsi inline, maka didapatkan ekspektasi dari output. Serta, program yang terdapat pada baris 4 dan seterusnya akan dikoreksi menggunakan fungsi inline.

Output:
1

sembilan, Preprocesor juga mendukung if-else direktif yang pada dasarnya digunakan untuk kompilasi kondisional.

Output:
No Output

sepuluh, Sebuah file header mungkin memiliki lebih dari satu kondisi langsung ataupun tidak langsung yang mengarahkan kepada deklarasi permasalahan dari variabel atau fungsi yang sama. Untuk menghindari permasalahan ini, direktif seperti defined, ifdef, dan ifndef digunakan.

sebelas, Terdapat beberapa standarisasi macro yang dapat digunakan untuk mencetak program file (_FILE_), Kompilasi tanggal (_DATE_), Kompilasi tanggal (_TIME_), dan baris angka (_LINE_).

Output:
Current File :/usr/share/IDE_PROGRAMS/C/other/081c548d50135ed88cfa0296159b05ca/081c548d50135ed88cfa0296159b05ca.c
Current Date :Sep  4 2019
Current Time :10:17:43
Line Number :9

duaBelas, Dapat dilakukan penghapusan macro yang telah didefinisikan:
#undef MACRO_NAME


Diikuti program yang dieksekusi secara tepat seperti yang telah dideklarasikan yaitu LIMIT sebagai variabel bilangan bulat setelah penghapusan definisi macro LIMIT sebelumnya.

Output:
1000
1001

Fakta menarik lainnya seputar macro dengan menggunakan #undef

Output:
2.00
0.50





Related Posts

Macros dan preprocessor pada bahasa C
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 :) "