Perhatikan kode berikut:
MULAILAHINTEGER n=5;
PRINT("Nilai n adalah %d",n);
AKHIR
Kode di atas bukan kode C yang valid.
Tetapi kode berikut ini valid:
//Contoh 1.c#define MULAI int main()
#tentukan AKHIR
#definisikan INTEGER menjadi
#define PRINT(A,B) printf(A,B)
MULAILAH
INTEGER n=5;
PRINT("Nilai n adalah %d",n);
AKHIR
Sebelum kompilasi, makro START, INTEGER, PRINT dan END telah diganti dengan nilainya, dan kode tersebut menjadi kode C yang valid. Kita bisa mengeceknya dengan menggunakan perintah berikut:
gcc -E Contoh1.cPerintah ini akan ditampilkan setelah memperluas semua makro.
Sekarang kita akan melihat berbagai jenis makro:
1. Makro seperti objek:
Sintaksis:
#define macro_name macro_value- Makro selalu dimulai dengan #define
- macro_name adalah nama makro yang ditentukan pengguna
- macro_value adalah nilai makro. Itu bisa apa saja, tapi satu garis dan badan makro berakhir dengan ujung garis itu. Itu tidak memerlukan titik koma (;) di akhir. Ruang juga dipertimbangkan.
Jika makro membutuhkan lebih dari satu baris, kita dapat melakukannya sebagai berikut:
#define macro_name macro_value1 \makro_nilai2 \
makro_nilai3
#tentukan MAX 200
Makro ini terlihat seperti objek data itu sebabnya jenis makro ini disebut sebagai makro seperti objek.
//Contoh2.c//#sertakan
#tentukan MAX 200
int utama()
printf("Nilai MAX adalah : %d",MAX);
kembali 0;
Di Contoh2.c, MAKS adalah makro. Dari output, kita amati bahwa MAKSIMAL diganti dengan nilainya 200.
2. Makro seperti fungsi:
Sintaksis:
#define macro_name() macro_valuenama_makro adalah nama makro yang ditentukan pengguna. Sepasang tanda kurung harus diletakkan setelah nama_makro. Tidak ada ruang yang diperbolehkan antara nama_makro dan tanda kurung. Kami juga dapat menyampaikan argumen dalam jenis makro ini.
#tentukan tambah(x,y) x+yMakro ini terlihat seperti panggilan fungsi itu sebabnya jenis makro ini disebut makro seperti fungsi.
//Contoh3.c#tentukan tambah(x,y) x+y
int utama()
dalam sebuah;
mengapung b;
a = tambah(4,5);
b = tambah(2.5,3.6)
kembali 0;
Dalam Contoh3.c, kita telah melihat bahwa tidak seperti fungsi C, makro hanya mengganti kode dengan argumen tanpa menghitungnya. Jadi, kita bisa melewatkan tipe data yang berbeda menggunakan makro yang sama.
Jika kita menempatkan spasi di antara nama makro dan tanda kurung, itu berfungsi sama dengan makro seperti objek. Di bawah C Contoh menggambarkan ini.
//Contoh4.c#tentukan tambah (x,y) x+y
int utama()
dalam sebuah;
mengapung b;
a = tambah(4,5);
b = tambah(2.5,3.6)
Dalam Contoh4.c, kita telah melihat bahwa penjumlahan makro diganti dengan (x,y) x+y . Sama seperti makro seperti objek.
3. Makro untuk Token Paste:
Dalam bahasa C, operator ## digunakan untuk menempelkan token. Dengan menggunakan operator ini, kita dapat menggabungkan dua token yang valid menjadi satu token yang valid.
Contoh:
#define MARGE(x,y) x##y
int utama()
int jumlah = MARGE(52,34);
kembali 0;
Jika kami mencoba menempelkan token yang tidak menghasilkan token yang valid, kompiler C memberikan kesalahan atau peringatan.
//Contoh6.c#define MARGE(x,y) x##y
int utama()
int jumlah = MARGE(52,+);
kembali 0;
Di Contoh6.c, kami memiliki pesan kesalahan karena, setelah kombinasi dua token, kami mendapatkan token '52+' yang tidak valid.
4. Makro untuk Merangkai:
Dalam bahasa C, operator # digunakan untuk mengubah parameter makro menjadi konstanta string. Ketika operator # didahului dengan parameter makro, parameter dikonversi menjadi string literal. Merangkai dapat digunakan untuk makro seperti objek dan seperti fungsi.
Contoh:
#define STRINGIZING(x) #x
int utama()
printf(STRINGIZING(Halo Dunia));
kembali 0;
Di Contoh7.c kita sudah mendapat string "Hello World" menggunakan makro STRINGIZING.
Kesimpulan:
Artikel ini telah mempelajari tentang semua jenis makro seperti Makro seperti objek, Makro seperti fungsi, Makro untuk Menempel Token, Makro untuk Merangkai dan Makro untuk Merangkai dalam bahasa C. Sekarang kita dapat menggunakan makro dalam program C kita tanpa ragu.