Cara Kerja Preprosesor pada Bahasa C
Preprosesor adalah sistem perangkat lunak atau program komputer yang dirancang untuk menjalankan perangkat keras komputer dan aplikasi program. Preprosesor melakukan pemrosesan data mulai dari 'bahasa tingkat tinggi'. Pemrosesan data atau preprosesing adalah tahap awal dari sistem proses bahasa program. Sistem proses bahasa program menerjemahkan bahasa tingkat tinggi ke bahasa tingkat mesin atau kode mesin absolut supaya dapat dimengerti oleh mesin. Preprosesor tidak mengetahui aturan scope dari bahasa C. Preprosesor direktif seperti #define akan bekerja selama program diaktifkan hingga program berakhir, seperti diperlihatkan pada gambar 1.
Sebelum memahami materi tentang Cara Kerja Preprosesor pada Bahasa C, terlebih dahulu pelajari materi tentang: Perbedaan stdio.h dan stdlib.h pada Bahasa C, Mencetak Nama Variabel Bahasa C dan Fungsinya, dan Konstanta Bahasa C dan Fungsinya.
Preprosesor dalam bahasa C adalah tahap awal dalam proses kompilasi yang bertugas mempersiapkan kode sumber sebelum diteruskan ke tahap kompilasi utama. Fungsi utama preprosesor adalah untuk melakukan manipulasi awal pada kode sumber, yang melibatkan penggantian makro, penghapusan komentar, dan pemrosesan direktif khusus yang dimulai dengan tanda pagar (#). Proses ini adalah langkah penting dalam kompilasi, karena memastikan bahwa kode yang diteruskan ke compiler adalah kode yang sudah disederhanakan dan diatur sesuai kebutuhan.
Cara kerja preprosesor dimulai dengan membaca seluruh kode sumber dan mencari direktif preprosesor. Direktif ini bisa berupa perintah untuk memasukkan file lain, seperti #include, yang memungkinkan penggabungan kode dari file header ke dalam program. Dengan #include, preprosesor menyisipkan isi file header secara langsung ke dalam kode sumber, sehingga fungsi-fungsi dan definisi lain dalam file tersebut tersedia bagi program.
Selain itu, preprosesor juga menangani makro, yang didefinisikan dengan #define. Makro adalah substitusi teks sederhana yang menggantikan nama simbol dengan nilai atau kode yang telah ditentukan sebelumnya. Preprosesor menggantikan semua kemunculan makro dalam kode sumber dengan nilai atau ekspresi yang terkait, sehingga memungkinkan pengembangan kode yang lebih modular dan mudah diubah. Makro ini bisa berupa konstanta atau fungsi yang didefinisikan untuk menyederhanakan kode dan mengurangi pengulangan.
Preprosesor juga mendukung pengondisian kompilasi melalui direktif seperti #if, #ifdef, #ifndef, dan #else. Direktif ini memungkinkan bagian-bagian tertentu dari kode sumber untuk disertakan atau diabaikan berdasarkan kondisi tertentu, seperti apakah sebuah makro telah didefinisikan atau tidak. Ini berguna untuk mengelola kode yang harus dikompilasi dalam situasi tertentu, misalnya untuk mendukung platform yang berbeda atau untuk mengaktifkan fitur khusus saat debugging.
Penghapusan komentar adalah fungsi lain dari preprosesor. Selama tahap ini, semua komentar dalam kode sumber dihapus, sehingga tidak mempengaruhi kompilasi atau ukuran akhir dari program yang dihasilkan. Komentar adalah bagian penting dalam pengembangan kode karena menyediakan dokumentasi internal untuk pengembang, tetapi hal tersebut tidak diperlukan dalam kode yang dikompilasi, sehingga dihapus oleh preprosesor.
Sebuah preprosesor umumnya melakukan tiga tugas pada bahasa tingkat tinggi, yaitu:
- satu, Menghapus kode baris komentar pada bahasa pemrograman: Preprosesor akan menghapus semua kode komentar yang terdapat dalam bahasa pemrograman yang telah dibuat sebelumnya. Sebuah komentar hanya ditulis untuk programmer untuk dapat memahami bahasa program yang dibuat oleh programmer tersebut. Sehingga, komentar tersebut akan dihapus karena mesin tidak memerlukan kode komentar pada saat program tersebut dijalankan. Preprosesor akan menghapus semua komentar yang tidak diperlukan ketika program telah dieksekusi.
- dua, File include: Prosesor akan mengambil semua library file yang dibutuhkan oleh program saat program tersebut dijalankan. Pada bahasa tingkat tinggi program yang dibuat diserakan juga kode #include yang merupakan suatu direktif preprosesor yang memberitahukan program atau kompilator untuk memasukkan konten dari library file secara spesifik. Contoh, #include akan membertahu preprosesor untuk memasukkan semua konten pustaka dari file stdio.h. Seperti contoh '#include "stdio.h" '.
catatan: Jika nama file ditutup dengan menggunakan simbol angle brackets, maka file yang dicari untuk standar kompilator juga menyertakan path-nya. Jika nama file ditutup dengan double quotes, maka path pencarian akan diperluas hingga termasuk sumber direktori saat ini.
- tiga, Makro expansi: Makro dapat disebut juga sebagai fungsi kecil yang tidak akan overhead selama proses dijalankan terhadap kode program. Jika ingin membuat sebuah fungsi yang memiliki pendefinisian kecil yang sifatnya akan dipanggil secara rekursif, maka akan lebih baik jika menggunakan makro pada fungsi tersebut, sehingga pendefinisian makro tersebut dapat diselesaikan oleh preprosesor.
Baca Juga:
#define SI 1000, adalah contoh sederhana dari sebuah makro.
Terdapat dua tipe dari makro, yaitu: makro menyerpai objek, adalah makro yang tidak mengambil parameter dan makro yang menyerupai fungsi yang memerlukan parameter dalam penggunaannya.
// makro menyerupai objek
#define
// makro menyerupai fungsi
#define ()
Dapat juga dilakukan penghapusan definisi makro dengan menggunakan #undef:
// menghapus makro
# undef
Dapat juga dibuat makro multibaris sama seperti sebuah fungsi, dimana setiap statement-nya diakhiri dengan tanda "\".
#include <stdio.h>
#define MACRO(num, str)
{\
printf("%d", num);\
printf(" adalah");\
printf(" %s angka", str);\
printf("\n");\
}
Preprosesor dalam bahasa C tidak hanya melakukan tugas dasar seperti penggantian makro dan penghapusan komentar; ia juga memiliki peran yang lebih kompleks dalam mengelola berbagai aspek pemrosesan kode sumber. Salah satu fitur yang sering digunakan adalah kemampuan preprosesor untuk menangani kondisi kompilasi yang kompleks melalui penggunaan direktif pengondisian. Misalnya, direktif #if, #elif, #else, dan #endif memungkinkan pengembang untuk menyusun kode yang hanya dikompilasi dalam kondisi tertentu, berdasarkan nilai ekspresi atau makro yang ditetapkan. Ini sangat berguna dalam pengembangan perangkat lunak yang harus berjalan di berbagai sistem operasi atau arsitektur perangkat keras, karena memungkinkan pengembang untuk menulis kode spesifik untuk lingkungan tertentu sambil mempertahankan satu basis kode sumber.
Preprosesor juga memungkinkan penggunaan direktif #undef untuk membatalkan definisi makro yang sebelumnya telah didefinisikan. Ini memungkinkan fleksibilitas dalam mengelola makro, terutama ketika makro tersebut tidak lagi dibutuhkan atau perlu diubah dalam konteks yang berbeda dari program. Selain itu, dengan menggunakan #error, preprosesor dapat menghentikan proses kompilasi dan menghasilkan pesan kesalahan khusus, yang sangat membantu untuk mendeteksi dan memperingatkan masalah atau kondisi yang tidak didukung pada tahap awal.
Salah satu aspek penting lainnya dari preprosesor adalah kemampuannya untuk menghasilkan file keluaran yang berisi kode yang telah diproses, sering disebut sebagai "file preprosesor" atau "file sumber yang telah diproses." File ini adalah hasil dari semua transformasi preprosesor dan mencerminkan kode sumber yang telah disederhanakan, dengan semua makro yang telah diganti, file header yang telah dimasukkan, dan direktif pengondisian yang telah dievaluasi. File ini berguna untuk debugging dan analisis, karena file tersebut memberikan pandangan yang jelas tentang kode yang akan dikompilasi oleh kompilator, memungkinkan pengembang untuk lebih mudah mengidentifikasi masalah atau kesalahan dalam kode sumber.
Preprosesor juga mendukung penggunaan direktif #pragma, yang memberikan instruksi spesifik kepada kompilator tentang bagaimana menangani kode tertentu. Instruksi-instruksi ini bervariasi tergantung pada kompilator yang digunakan, tetapi bisa mencakup hal-hal seperti optimasi, peringatan, atau peringatan khusus yang berkaitan dengan bagian tertentu dari kode. Meskipun #pragma bersifat spesifik untuk kompilator tertentu, preprosesor tersebut memberikan cara bagi pengembang untuk menyempurnakan perilaku kompilasi dan mengoptimalkan kinerja aplikasi.
Secara keseluruhan, preprosesor di bahasa C adalah alat yang kuat dan serbaguna yang memainkan peran penting dalam pengelolaan kode sumber sebelum kompilasi. Dengan kemampuannya untuk melakukan berbagai manipulasi dan pengaturan pada kode, preprosesor memungkinkan pengembangan yang lebih fleksibel, pemeliharaan yang lebih mudah, dan kontrol yang lebih besar atas proses kompilasi. Memahami cara kerja dan fungsi-fungsi preprosesor adalah kunci untuk memaksimalkan efisiensi dan efektivitas dalam pengembangan perangkat lunak di bahasa C.
Referensi Tambahan:
- Penjelasan Singkat, Fungsi Library Difftime pada Bahasa C
- Penjelasan Singkat, Fungsi Tmpnam pada Bahasa C
- Manfaat Utama Keyword _Generic pada Bahasa C
- 13 Contoh Program Fungsi Library Matematika Math.h pada Bahasa C
- 5 Perbedaan Utama Typedef vs #define pada Bahasa C
- 14 Macam Specifier Fungsi Strftime pada Bahasa C
- 6 Jenis Fungsi Exec Family dan Perannya dalam Bahasa C
Artikel ini didedikasikan kepada: Bayu Permana Putra, Debi Anggun Mentari Putri, Dhimas Muhammad Firdaus, Emi Mardiyanti, dan Eri Eriyanto.
5 komentar untuk "Cara Kerja Preprosesor pada Bahasa C"
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 -
Apa yang dimaksud dengan preprosesor dalam bahasa C?
BalasHapusPreprosesor dalam bahasa C adalah preprosesor makro yang digunakan secara otomatis oleh kompilator bahasa C untuk mengubah program yang telah dibuat sebelum dilakukan proses kompilasi program. Prosesor disebut juga sebagai makro karena memungkinkan user untuk menentukan jenis makro yang akan digunakan yang merupakan singkata untuk konstruksi yang lebih panjang.
HapusPreprosesor bahasa C adalah makro preprosesor yang digunakan untuk bahasa pemrograman C, objective-C, dan C++. Preprosesor menyediakan kemampuan untuk memasukkan file header, perluasan makro, dan kontrol baris pada bahasa pemrograman tersebut.
BalasHapusPada awalnya, preprosesor bahasa C adalah program terpisah dari kompilator. Preprosesor juga tidak dimaksudkan untuk digunakan hanya untuk bahasa pemrograman C saja, programmer juga dapat menggunakannya untuk membuat berbagai hal seperti file konfigurasi yang dapat dibuat secara bersyarat atau juga dapat digunakan untuk menambahkan fungsionalitas ke kode FORTRAN ataupun semacamnya.
BalasHapusNamun, secara bertahap penggunaan dari preprosesor tersebut mulai mengalami penyempitan dimana hanya digunakan untuk program yang berbasis bahasa C dan C++ saja, dan hanya untuk keperluan efisiensi dan kualitas pelaporan error pada saat kompilasi program, dan preprosesor pun kemudian digabungkan ke dalam kompilator bahasa C dan C++ itu sendiri.
Komputer Linux masih memiliki progam yang disebut 'cpp' yang merupakan alat klasik yang digunakan dari pertengahan tahun 1970-an. Namun, program tersebut sudah tidak benar-benar digunakan lagi oleh kompilator bahasa C.
Apa yang dilakukan oleh preprosesor sebenarnya sangat sederhana, preprosesor hanya melihat melalui kode sumber program dalam satu baris pada satu waktu (tidak seperti kompilator bahasa C dan C++ yang biasa memperlakukan baris baru sebagai spasi).
Jika sebuah baris dimulai dengan spasi dan kemudian dengan tanda '#', maka preprosesor akan memperlakukan baris tersebut sebagai acuan atau arahan untuk melakukan suatu tindakan.
Saat membaca file sumber, preprosesor (setidaknya secara konseptual) akan mengeluarkan file sumber baru dengan perintah '#' yang dihapus, dan menyertakan semua file perluasan, semua file dari #ifdef / #if / #else / #endif akan diproses, dan memberikan makro sesuai dengan kebutuhan program.
File output yang dihasilkan kemudian akan dikirim ke kompilator bahasa C yang sebenarnya, dimana kompilator tidak perlu melihat atau mencari perintah '#' dan langsung dapat mengkompilasi setiap baris kode program yang telah dikirim tersebut.
Catatan: dalam praktiknya, hal tersebut memang agak sedikit rumit untuk dilakukan.
Preprosesor adalah sebuah pustaka informasi yang mendefinisikan dan menafsirkan kompilator, tentang apa yang akan dilakukan instruksi tertentu dalam suatu program.
BalasHapus