Bagikan melalui


Makro (C/C++)

Praprosesor memperluas makro di semua baris kecuali direktif praprosesor, garis yang memiliki # sebagai karakter non-spasi putih pertama. Ini memperluas makro di beberapa arahan yang tidak dilewati sebagai bagian dari kompilasi kondisional. Arahan kompilasi bersyar memungkinkan Anda untuk menekan kompilasi bagian file sumber. Mereka menguji ekspresi konstanta atau pengidentifikasi untuk menentukan blok teks mana yang akan diteruskan ke pengkompilasi, dan mana yang akan dihapus dari file sumber selama praproscesing.

Direktif #define biasanya digunakan untuk mengaitkan pengidentifikasi yang bermakna dengan konstanta, kata kunci, dan pernyataan atau ekspresi yang umum digunakan. Pengidentifikasi yang mewakili konstanta terkadang disebut konstanta simbolis atau konstanta manifes. Pengidentifikasi yang mewakili pernyataan atau ekspresi disebut makro. Dalam dokumentasi praprosesor ini, hanya istilah "makro" yang digunakan.

Ketika nama makro dikenali dalam teks sumber program, atau dalam argumen perintah praprosesor tertentu lainnya, itu diperlakukan sebagai panggilan ke makro tersebut. Nama makro digantikan oleh salinan isi makro. Jika makro menerima argumen, argumen aktual yang mengikuti nama makro digantikan untuk parameter formal dalam isi makro. Proses mengganti panggilan makro dengan salinan isi yang diproses disebut perluasan panggilan makro.

Dalam istilah praktis, ada dua jenis makro. Makro seperti objek tidak mengambil argumen. Makro seperti fungsi dapat didefinisikan untuk menerima argumen, sehingga terlihat dan bertindak seperti panggilan fungsi. Karena makro tidak menghasilkan panggilan fungsi aktual, Anda terkadang dapat membuat program berjalan lebih cepat dengan mengganti panggilan fungsi dengan makro. (Dalam C++, fungsi sebaris sering kali merupakan metode yang disukai.) Namun, makro dapat membuat masalah jika Anda tidak menentukan dan menggunakannya dengan hati-hati. Anda mungkin harus menggunakan tanda kurung dalam definisi makro dengan argumen untuk mempertahankan prioritas yang tepat dalam ekspresi. Selain itu, makro mungkin tidak menangani ekspresi dengan benar dengan efek samping. Untuk informasi selengkapnya, lihat getrandom contoh di Direktif #define.

Setelah menentukan makro, Anda tidak dapat mendefinisikannya kembali ke nilai yang berbeda tanpa terlebih dahulu menghapus definisi asli. Namun, Anda dapat mendefinisikan ulang makro dengan definisi yang sama persis. Dengan demikian, definisi yang sama mungkin muncul lebih dari sekali dalam program.

Direktif #undef menghapus definisi makro. Setelah menghapus definisi, Anda dapat menentukan ulang makro ke nilai yang berbeda. Arahan #define dan Arahan #undef membahas #define masing-masing arahan dan #undef .

Untuk informasi selengkapnya, lihat,

Baca juga

Referensi praprosesor C/C++