Preprocessor & Makro C: Menguasai #include, #define, dan Kompilasi Bersyarat
Preprocessor & Makro C
Jelajahi kekuatan preprocessor C: pelajari cara menyertakan header, mendefinisikan konstanta dan fungsi, dan mengontrol alur kompilasi dengan direktif bersyarat.
Preprocessor C berjalan sebelum kompiler, mengubah kode sumber Anda dengan memperluas makro, menyertakan file header, dan mengevaluasi pernyataan bersyarat. Ini adalah alat penting untuk menulis kode yang fleksibel dan dapat digunakan kembali.
Semua direktif preprocessor dimulai dengan simbol #. Contoh:
#define PI 3.14
Menyertakan File Header: #include
Direktif #include memasukkan isi file header secara langsung ke dalam file sumber Anda. Penggunaan umum:
#include <stdio.h>
Tanpa #include <stdio.h>, fungsi seperti printf() dan scanf() akan tidak terdefinisi. Anda juga dapat membuat header kustom:
#include "my_header.h"
Header kustom berguna untuk mengelompokkan deklarasi fungsi dan konstanta terkait.
Mendefinisikan Konstanta dan Ekspresi: #define
Sebuah makro mengganti token atau ekspresi dengan nilai sebelum kompilasi. Contoh:
#define c 299792458 /* kecepatan cahaya */
Menggunakan c di mana saja dalam program Anda akan diperluas menjadi 299792458.
Contoh 1: Mendefinisikan PI
#include <stdio.h> #define PI 3.1415 int main() { float radius, area; printf("Masukkan jari-jari: "); scanf("%f", &radius); area = PI * radius * radius; printf("Area=%.2f", area); return 0; }
Macro Seperti Fungsi
Makro dapat menerima argumen, berfungsi seperti fungsi inline:
#define circleArea(r) (3.1415 * (r) * (r))
Untuk circleArea(5), preprocessor akan memperluasnya menjadi (3.1415 * 5 * 5).
Direktif bersyarat memungkinkan Anda untuk menyertakan atau mengecualikan blok kode pada waktu kompilasi, mirip dengan pernyataan if tetapi dievaluasi sebelum eksekusi.
Kasus Penggunaan Umum
Menargetkan sistem operasi atau hardware yang berbeda.
Membangun versi debug tanpa overhead runtime.
Mempertahankan jalur kode lama untuk referensi.
Direktif Utama
#ifdef MACRO /* kode ketika MACRO didefinisikan */ #endif
#if EXPRESSION /* kode ketika EXPRESSION non-nol */ #else /* kode ketika EXPRESSION nol */ #endif
#if EXPRESSION /* kode */ #elif ANOTHER_EXPRESSION /* kode alternatif */ #else /* kode fallback */ #endif
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 /* buffer cukup besar */ #endif
Macro Tertentu
Macro
Nilai
__DATE__
String tanggal kompilasi saat ini
__FILE__
String nama file saat ini
__LINE__
Nomor baris tempat macro muncul
__STDC__
Non-nol jika kompiler mengikuti standar ANSI C
__TIME__
String waktu kompilasi saat ini
Contoh 3: Menampilkan Waktu Kompilasi
#include <stdio.h> int main() { printf("Waktu saat ini: %s", __TIME__); return 0; }