Pengaturcaraan C

Makro dalam bahasa C

Makro dalam bahasa C
Makro dalam bahasa C adalah sekeping kod yang telah diberi nama. Apabila namanya digunakan di mana sahaja dalam program, nilai makro diganti sebelum penyusunan program. Dalam artikel ini, kita akan melihat secara terperinci cara menulis makro dalam bahasa C.

Pertimbangkan kod berikut:

BERMULA
INTEGER n = 5;
CETAK ("Nilai n adalah% d", n);
TAMAT

Kod di atas bukan kod C yang sah.

Tetapi kod berikut adalah sah:

// Contoh1.c
#tentukan MULAI int utama ()
#tentukan TAMAT
#menentukan INTEGER int
#tentukan PRINT (A, B) printf (A, B)
BERMULA
INTEGER n = 5;
CETAK ("Nilai n adalah% d", n);
TAMAT

Sebelum penyusunan, makro MULAI, INTEGER, CETAK dan TAMAT telah diganti dengan nilainya, dan kod tersebut menjadi kod C yang sah. Kita boleh periksa menggunakan arahan berikut:

gcc -E Contoh1.c

Perintah ini akan dipaparkan setelah mengembangkan semua makro.

Sekarang kita akan melihat pelbagai jenis makro:

1. Makro seperti objek:

Sintaks:

#tentukan nilai makro_nama makro_nilai

Sekiranya makro mengambil lebih daripada satu baris, kita boleh melakukannya seperti berikut:

#tentukan makro_nama makro_nilai1 \
nilai_ makro2 \
nilai makro3
#tentukan MAX 200

Makro ini kelihatan seperti objek data sebab itulah makro jenis ini disebut sebagai makro seperti objek.

// Contoh2.c
// # sertakan
#tentukan MAX 200
int utama ()

printf ("Nilai MAX ialah:% d", MAX);
pulangan 0;

Dalam Exapmle2.c, MAX adalah makro. Dari hasilnya, kita melihat bahawa MAX digantikan dengan nilainya 200.

2. Makro seperti fungsi:

Sintaks:

#tentukan nama makro_nama () nilai makro

nama makro adalah nama makro yang ditentukan pengguna. Sepasang kurungan harus meletakkan selepas nama makro. Tiada ruang yang dibenarkan di antara nama makro dan kurungan. Kami juga boleh menyampaikan argumen dalam makro jenis ini.

#tentukan tambah (x, y) x + y

Makro ini kelihatan seperti fungsi panggilan itulah sebabnya jenis makro ini disebut fungsi seperti makro.

// Contoh3.c
#tentukan tambah (x, y) x + y
int utama ()

int a;
apungan b;
a = tambah (4,5);
b = tambah (2.5,3.6)
pulangan 0;

Dalam Contoh3.c, kita telah melihat bahawa tidak seperti fungsi C, makro hanya menggantikan kod dengan argumen tanpa menghitungnya. Oleh itu, kita dapat meneruskan jenis data yang berbeza menggunakan makro yang sama.

Sekiranya kita meletakkan ruang antara nama makro dan tanda kurung, ia berfungsi sama seperti makro seperti objek. Di bawah C Contoh menggambarkan perkara ini.

// Contoh4.c
#tentukan tambah (x, y) x + y
int utama ()

int a;
apungan b;
a = tambah (4,5);
b = tambah (2.5,3.6)

Dalam Contoh4.c, kita telah melihat bahawa penambahan makro digantikan oleh (x, y) x + y . Sama seperti makro objek.

3. Makro untuk Token Paste:
Dalam bahasa C, pengendali ## digunakan untuk menampal token. Dengan menggunakan operator ini, kita dapat menggabungkan dua token yang sah menjadi satu token yang sah.
Contoh:

// Contoh5.c
#definisi MARGE (x, y) x ## y
int utama ()

int num = MARGE (52,34);
pulangan 0;

Sekiranya kita cuba menampal token yang tidak menghasilkan token yang sah, penyusun C memberikan ralat atau amaran.

// Contoh6.c
#tentukan MARGE (x, y) x ## y
int utama ()

int num = MARGE (52, +);
pulangan 0;

Dalam Contoh6.c, kami mempunyai mesej ralat kerana, setelah gabungan dua token, kami mendapat token yang tidak sah '52 + '.

4. Makro untuk Stringizing:
Dalam bahasa C, # operator digunakan untuk menukar parameter makro menjadi pemalar rentetan. Apabila pengendali # mendahului parameter makro, parameter tersebut berubah menjadi literal rentetan. Stringizing boleh digunakan untuk makro seperti objek dan fungsi.
Contoh:

// Contoh7.c
#tentukan STRINGIZING (x) #x
int utama ()

printf (STRINGIZING (Hello World));
pulangan 0;

Dalam Contoh7.c kami mendapat rentetan "Hello World" menggunakan makro STRINGIZING.

Kesimpulan:

Artikel ini telah mengetahui tentang semua jenis seperti makro Makro seperti objek, Makro seperti fungsi, Makro untuk Token Pasting, Makro untuk Stringizing dan Makro untuk Stringizing dalam bahasa C. Sekarang kita boleh menggunakan makro dalam program C kita tanpa keraguan.

Vulkan untuk Pengguna Linux
Dengan setiap kad grafik generasi baru, kami melihat pembangun permainan mendorong had kesetiaan grafik dan semakin dekat dengan fotorealisme. Tetapi ...
OpenTTD vs Simutrans
Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...
Tutorial OpenTTD
OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...