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.


Macro adalah kode-kode untuk memberikan instruksi kepada preprocesor.

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 DirectiveFungsi Macro
#defineMendefiniskan konstanta dan fungsi
#includeuntuk menambahkan kode ke dalam program
#undefuntuk menghapus macro yang sudah didefinisikan
#ifdefuntuk mengecek apakah macro sudah didefinisikan
#ifndefuntuk mengecek apakah macro belum didefinisikan
#ifuntuk membuat kondisi if
#elseuntuk membuat alternatif untuk if
#elifuntuk membuat kondisi else if
#endifuntuk mengakhiri blok kondisi if
#erroruntuk mencetak pesan error ke stderr
#pragmauntuk 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__ berisi 1 jika 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 : 1

Direktif Kondisi

Kita bisa membuat kondisi dengan direktif macro, ada beberapa direktif yang disediakan untuk membuat kondisi:

  • #if untuk kondisi if;
  • #else untuk kondisi else;
  • #elif untuk kondisi else if;
  • #endif untuk mentutup atau mengakhiri if;
  • #ifdef untuk mengecek jika macro sudah didefinisikan;
  • #ifndef untuk 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
}
Maka hasil preprocessor-nya:
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

Postingan populer dari blog ini

IP

Scala

Variabel Dan Tipe Data