informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Bahasa C menetapkan beberapa simbol yang telah ditentukan sebelumnya yang dapat digunakan secara langsung dan diproses selama prapemrosesan.
__FILE__//进行编译的源文件
__LINE__//文件当前的行号
__DATE__//文件被编译的日期
__TIME__//文件被编译的时间
__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义
Hasil tes:
#define digunakan untuk menulis definisi ketika mendefinisikan sebuah konstanta:
#define MAX 100
Aturan logikanya adalah langsung mengganti MAX dengan 100 ketika muncul pada kode berikut. Langkah operasi ini diselesaikan pada tahap prapemrosesan. Umumnya, saat menggunakan #define untuk mendefinisikan sebuah konstanta, namanya ditulis dalam huruf besar.
adegan yang akan digunakan:
#define digunakan untuk mendefinisikan makro dengan cara yang sama seperti fungsi, tetapi logikanya adalah pengganti. Saat mengganti, variabel harus diapit tanda kurung untuk menghindari masalah prioritas operator yang mungkin tidak memberikan hasil yang kita harapkan.
Cara Penggunaan:
#define MAX(x,y) ((x) > (y) ? (x) : (y))
Ini adalah makro yang ditulis untuk melengkapi penilaian nilai dua angka yang langsung lebih besar. Perhatikan bahwa tanda kurung setelah nama makro harus dekat dengan makro.
Kasus penggunaan:
Melalui dua kasus di atas, kita dapat menemukan bahwa makro tidak membatasi tipe saat meneruskan parameter. Jika fungsi diteruskan, tipe kembalian dari fungsi tersebut adalah tetap, dan makro berjalan lebih cepat.
Keuntungan makro:
- 1. Saat menyelesaikan perhitungan dengan sejumlah kecil kode, waktu kerja makro lebih pendek dibandingkan fungsi.
- 2. Lebih penting lagi, parameter fungsi harus dideklarasikan dengan tipe tertentu. Makro dapat diterapkan ke berbagai tipe yang dapat dibandingkan menggunakan >. Jenis makro tidak relevan.
Kekurangan makro:
- Setiap kali makro digunakan, salinan kode definisi makro akan dimasukkan ke dalam program. Kecuali jika makronya relatif pendek, hal ini dapat menambah durasi program secara signifikan.
- Makro tidak dapat di-debug.
- Karena makro tidak bergantung pada tipe, maka makro tersebut tidak cukup ketat.
- Makro dapat menyebabkan masalah prioritas operator, membuat program rentan terhadap kesalahan.
Tabel perbandingan makro dan fungsi:
Atribut | #define makro yang ditentukan | fungsi |
---|---|---|
panjang kode | Makro dimasukkan ke dalam program setiap kali digunakan.Kecuali untuk makro yang sangat kecil, durasi program akan bertambah secara signifikan | Kode fungsi hanya muncul di satu tempat; setiap kali digunakan, kode yang sama di tempat itu dipanggil |
Kecepatan eksekusi | lebih cepat | Ada overhead tambahan dari pemanggilan dan pengembalian fungsi, yang lebih lambat. |
prioritas operator | Parameter makro dievaluasi dalam konteks semua ekspresi di sekitarnya. Kecuali jika tanda kurung disertakan, prioritas operator yang berdekatan mungkin memiliki konsekuensi yang tidak dapat diprediksi, jadi disarankan agar makro ditulis dengan lebih banyak tanda kurung. | Parameter fungsi hanya dievaluasi dan diteruskan ke fungsi saat fungsi tersebut dipanggil. Ekspresi dievaluasi dengan mudah ditebak. |
Parameter dengan efek samping | Parameter dapat diganti ke beberapa lokasi dalam badan makro, dan jika parameter makro dievaluasi beberapa kali, evaluasi parameter dengan efek samping dapat menghasilkan hasil yang tidak terduga. | Parameter fungsi hanya dievaluasi saat meneruskan parameter dan mudah dikontrol. |
Tipe Parameter | Parameter makro tidak ada hubungannya dengan tipe. Selama operasi pada parameter legal, maka dapat digunakan untuk tipe parameter apa pun. | Parameter suatu fungsi terkait dengan tipenya. Jika berbeda, diperlukan fungsi yang berbeda dan tugasnya pun berbeda. |
men-debug | Makro tidak nyaman untuk di-debug | Fungsi dapat di-debug pernyataan demi pernyataan |
pengulangan | Makro tidak bisa bersifat rekursif | Makro tidak bisa bersifat rekursif |
#operator mengonversi argumen makro menjadi string literal. Itu hanya diperbolehkan muncul di daftar substitusi makro dengan parameter.
Operasi yang dilakukan oleh operator # dapat dipahami sebagai "stringifikasi".
Contoh penggunaan:
## dapat menggabungkan simbol di kedua sisinya menjadi satu simbol, yang memungkinkan definisi makro membuat pengidentifikasi dari segmen teks terpisah.lem untuk spidol
Koneksi seperti itu harus menghasilkan pengenal yang valid. Kalau tidak, hasilnya tidak terdefinisi. Mari kita pikirkan di sini. Saat menulis fungsi untuk mencari nilai lebih besar dari dua angka, fungsi yang berbeda harus ditulis untuk tipe data yang berbeda.
Contoh penggunaan: