Preprocessor Dan Marco
Pengertian
- Preprocessor adalah proses yang dilakukan sebelum program di-compile berdasarkan macro yang diberikan. Hasil preprocessor adalah kode program, bukan file binary. Kode program inilah yang nantinya akan di-compile oleh compier.
Jika ingin melihat hasil preprocessor, kita bisa gunakan perintah cpp atau gcc -E.
Contoh macro:
#include <stdio.h>Macro ini untuk memberi perintah ke preprocessor:
“Hi preprocessor, masukan semua kode program yang ada di stdio.h ke dalam kode program ini”.
Selain macro #include ada juga macro-macro yang lainnya.
| Macro Directive | Fungsi Macro |
|---|---|
#define | Mendefiniskan konstanta dan fungsi |
#include | untuk menambahkan kode ke dalam program |
#undef | untuk menghapus macro yang sudah didefinisikan |
#ifdef | untuk mengecek apakah macro sudah didefinisikan |
#ifndef | untuk mengecek apakah macro belum didefinisikan |
#if | untuk membuat kondisi if |
#else | untuk membuat alternatif untuk if |
#elif | untuk membuat kondisi else if |
#endif | untuk mengakhiri blok kondisi if |
#error | untuk mencetak pesan error ke stderr |
#pragma | untuk ngasi instruksi ke compiler. |
Macro directive adalah simbol-simbol atau kata-kata yang dipakai untuk membuat atau mendefinisikan macro.
Pendefinisian macro dapat ditulis di mana saja, bisa di dalam fungsi main maupun di luar. Bisa di header file maupun souce file.
Predefined Macro
Predefined macro adalah macro-macro yang sudah ada atau sudah didefinisikan di komputer kita. Kita tinggal pakai aja.
Contoh predefined macro:
__DATE__berisi tanggal saat ini;__TIME__berisi waktu saat ini;__FILE__berisi nama file dari kode program;__LINE__berisi nomor baris program.__STDC__berisi1jika program di-compile dengan standar ANSI.
Contoh penggunaan:
Buatlah file program baru dengan nama predefined_macro.c dengan isi sebagai beriikut.
#include <stdio.h>
void main() {
printf("File : %s\n", __FILE__ );
printf("Date : %s\n", __DATE__ );
printf("Time : %s\n", __TIME__ );
printf("Line : %d\n", __LINE__ );
printf("ANSI : %d\n", __STDC__ );
}Hasilnya:
File : predefined_macro.c
Date : May 16 2022
Time : 03:36:24
Line : 8
ANSI : 1Direktif Kondisi
Kita bisa membuat kondisi dengan direktif macro, ada beberapa direktif yang disediakan untuk membuat kondisi:
#ifuntuk kondisiif;#elseuntuk kondisielse;#elifuntuk kondisielse if;#endifuntuk mentutup atau mengakhiriif;#ifdefuntuk mengecek jika macro sudah didefinisikan;#ifndefuntuk mengecek jika macro belum didefinisikan.
Contoh pengguaan:
#include <stdio.h>
#ifndef DEBUG
#define DEBUG true
#endif
void main(){
#if defined(DEBUG)
printf("Debugging mode is on\n");
#else
printf("Debugging mode is off\n");
#endif
}void main(){
printf("Debugging mode is on\n");
}Jadi kita bisa memilih kode mana yang akan di proses berdasarkan kondisi tertentu.
Operator pada Macro
Macro punya 4 operator yang bisa dipakai:
1. Operator Sambungan
Operator sambung menggunakan simbol backslash (\), fungsinya untuk menyambung definisi macro jika lebih dari satu baris.
Contoh:
#define message_for(a, b) \
printf(#a " and " #b ": We love you!\n")2. Operator Stringize (#)
Operator stringize menggunakan simbol pagar (#), berfungsi untuk mengubah parameter pada macro menjadi teks string.
#include <stdio.h>
#define message_for(a, b) \
printf(#a " and " #b ": We love you!\n")
int main(void) {
message_for(Petani, Kode);
return 0;
}3. Operator Token Pasting
Operator token pasting berfungsi untuk mengambil nama variabel atau parameter yang diberikan ke macro. Operator ini menggunakan simbol pagar ganda (##).
Contoh:
#include <stdio.h>
#define tokenpaster(n) printf ("%d", token_##n)
int main(void) {
int petani_kode = 40;
tokenpaster(petani_kode);
return 0;
}
Maka hasil preprocessor-nya:
int main(void) {
int petani_kode = 40;
printf ("%d", token_petani_kode);
return 0;
}
4. Operator defined()
Operator defined() berfungsi untuk mengecek kondisi suatu macro. Apakah macro tersebut sudah didefinisikan atau tidak. Ini sama seperti direktif #ifdef dan #ifndef.
Contoh:
#include <stdio.h>
#if !defined (MESSAGE)
#define MESSAGE "You wish!"
#endif
int main(void) {
printf("Here is the message: %s\n", MESSAGE);
return 0;
}
Maka hasil preprocessornya:
int main(void) {
printf("Here is the message: %s\n", "You wish!");
return 0;
}
Parameter untuk Macro
Parameter adalah variabel khusus yang dipakai oleh macro untuk diproses. Biasanya kita butuhkan saat membuat macro berbentuk fungsi.
Contoh:
#include <stdio.h>
#define MAX(x,y) ((x) > (y) ? (x) : (y))
void main(void) {
printf("Max between 20 and 10 is %d\n", MAX(10, 20));
return 0;
}
Maka hasil preprocessor-nya:
void main(void) {
printf("Max between 20 and 10 is %d\n", ((10) > (20) ? (10) : (20)));
return 0;
}
Komentar
Posting Komentar