Lompat ke konten Lompat ke sidebar Lompat ke footer

Preprosesor Direktif Bahasa C dan Fungsinya

Seperti namanya, preprosesor adalah program yang digunakan untuk memproses kode sumber sebelum kode sumber tersebut kompilasi. Terdapat beberapa urutan yang dilibatkan dalam penulisan program dan eksekusi program pada bahasa C dan C++.


Sebelum memahami lebih dalam materi tentang Preprosesor Direktif Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Cara Kerja Preprosesor pada Bahasa C, Konstanta Bahasa C dan Fungsinya, dan Mencetak Nama Variabel Bahasa C dan Fungsinya.

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

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

Terdapat empat tipe utama dari direktif preprosesor:
  • Makro.
  • File inklusi.
  • Conditional Compilation.
  • Direktif bentuk lainnya.

Mari mempelajari beberapa bentuk direktif tersebut secara lebih detail, seperti yang dijelaskan berikut ini:

satu, Makro: adalah bagian dari kode program yang terdiri dari beberapa penamaan. Dimanapun nama tersebut ditemukan oleh kompilator, maka kompilator akan mengganti nama tersebut dengan potongan kode sebenarnya yang disimpan dalam file library. Direktif "#define" digunakan untuk mendefinisikan sebuah makro pada bahasa pemrograman. Mari pahami definisi makro melalui contoh program berikut ini.

Contoh: pada bahasa C

#include <stdio.h> 

 

// definisi makro 

#define LIMIT

 

int main() 

 

for (int i = 0; i < LIMIT; i++) 

printf("%d \n",i); 

 

return 0

}

Output:
0
1
2
3
4

Contoh: pada bahasa C++

#include <iostream> 

 

// definisi makro 

#define LIMIT 5

 

int main() 

 

for (int i = 0; i < LIMIT; i++) 

std::cout << i << "\n"

 

return 0

}

Output:
0
1
2
3
4

Pada program yang telah disajikan sebelumnya, ketika kompilator mengeksekusi keyword LIMIT, maka keyword tersebut akan diganti dengan angka 5. Keyword 'LIMIT' pada definisi makro disebut juga sebagai template makro dan angka "5" adalah perluasan makro atau macro expansion.

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

Makro dengan argumen: Dapat juga dilewatkan makro pada suatu argumen dalam bahasa pemrograman. Makro didefinsikan dengan argumen yang bekerja sama seperti sebuah fungsi. Mari pahami penjelasan tersebut dengan menggunakan contoh program berikut:

Contoh: pada bahasa C

#include <stdio.h> 

 

// makro dengan parameter 

#define AREA(l, b) (l * b)

 

int main() 

int l1 = 10, l2 = 5, area; 

area = AREA(l1, l2); 

 

printf("Luas persegi panjang"

" adalah: %d", area); 

 

return 0

}

Output:
Luas persegi panjang adalah: 50

Contoh: pada bahasa C++

#include <iostream> 

 

// makro dengan parameter 

#define AREA(l, b) (l * b) 

 

int main() 

int l1 = 10, l2 = 5, area; 

area = AREA(l1, l2); 

 

std::cout << "Luas persegi"

" panjang adalah: " << area; 

 

return 0

}

 

Output:
Luas persegi panjang adalah: 50

Dapat diperhatikan bahwa 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 hal tersebut, maka AREA(10,5) akan setara 10*5.

Dua, File include: Tipe direktif dari preprosesor ini memberitahukan kompilator untuk mengambil sebuah file dalam kode sumber dari kode program. Terdapat dua tipe file yang dapat dimasukkan oleh user pada program tersebut, 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 masing-masing. Fungsi berbeda juga memerlukan pendeklarasian yang berbeda dari header file. Contoh ,standar fungsi I/O pada file 'iostream' dimana fungsi tersebut 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 lain yang ukurannya lebih kecil. Tipe dari file tersebut adalah file definisi user atau user defined file. File tersebut dapat didefinsikan dengan cara sebagai berikut :

#include"filename"

tiga, Kompilasi kondisional: Direktif kompilasi kondisional adalah tipe data direktif yang membantu mengkompilasi porsi spesifik dari program atau melewati kompilasi dari bagian spesifik pada program berdasarkan kondisi tertentu. Kondisi tersebut 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 makro tersebut akan dieksekusi secara 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 pula dua direktif yang tidak umum yang dipakai pada suatu program, yaitu:

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

#undef LIMIT

Dengan menggunakan statement ini maka dapat dilakukan pembatalan definisi dari makro LIMIT yang sudah dideklarasikan sebelumnya. Dimaka setiap statement "ifdef LIMIT" akan dievaluasi untuk berubah statement makro menjadi bernilai false.

Direktif #pragma: Direktif ini adalah direktif khusus yang digunakan untuk menyalakan dan mematikan beberapa fitur. Tipe direktif ini adalah compiler-spesific atau 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 pada program, sebelum program tersebut dimulai dan sesaat sebelum program tersebut berakhir. 

Catatan: Program berikut tidak dapat bekerja dengan kompilator GCC.

Contoh:

#include <stdio.h> 

 

void func1(); 

void func2(); 

 

#pragma startup func1 

#pragma exit func2 

 

void func1() 

printf("Dalam fungsi"

" func1()\n"); 

 

void func2() 

printf("Dalam fungsi"

" func2()\n"); 

 

int main() 

void func1(); 

void func2(); 

printf("Dalam fungsi"

" main()\n"); 

 

return 0

}

Output:
Dalam fungsi func1()
Dalam fungsi main()
Dalam fungsi 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 lain kode program berikut untuk hasil output pada kompilator GCC.

Contoh:

#include <stdio.h> 

 

void func1(); 

void func2(); 

 

void __attribute__((constructor)) func1();

 

void __attribute__((destructor)) func2(); 

 

void func1() 

printf("Dalam fungsi"

" func1()\n"); 

 

void func2() 

printf("Dalam fungsi"

" func2()\n"); 

 

int main() 

printf("Dalam fungsi"

" main()\n"); 

 

return 0

}


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 telah 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.

Artikel ini didedikasikan kepada: Debi Anggun Mentari Putri, Dhimas Muhammad Firdaus, Emi Mardiyanti, Eri Eriyanto, dan Fandi Panji Kurniawan.

5 komentar untuk "Preprosesor Direktif Bahasa C dan Fungsinya"

  1. Apa yang dimaksud dengan preprosesor dan direktif pada bahasa C?

    BalasHapus
    Balasan
    1. Preprosesor bahasa C adalah preprosesor makro yang digunakan secara otomatis oleh kompilator bahasa C untuk mengubah program yang telah dibuat sebelumnya sebelum dikompilasi dilakukan. Contoh, #define adalah bentuk direktif yang mendefinisikan sebuah makro.

      Hapus
  2. Direktif preprosesor seperti #define dan #ifdef, biasanya digunakan untuk membuat kode sumber program mudah untuk diubah dan dikompilasi pada lingkungan pengembangan program yang berbeda. Direktif dalam file sumber memberitahukan preprosesor untuk mengambil suatu tindakan tertentu terhadap program yang akan dikompilasi. Jalur preprosesor akan dikenali dan dijalankan sebelum dilakukan ekspansi makro pada program.

    BalasHapus
  3. Berikat contoh dari kompilasi program untuk direktif preprosesor pada bahasa C?

    BalasHapus
    Balasan
    1. Preprososor direktif dapat didefinisikan dalam suatu kode sumer program ataupun pada baris umum sebagai sebuah argumen selama proses kompilasi program. Contoh preprosesor direktif yang dapat digunakan pada bahasa C adalah #define dan #ifdef: yang digunakan untuk mendefinisikan dan membatalkan definisi dari simbol kompilasi bersyarat pada masing-masing deklarasi program.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -