Disyorkan, 2024

Pilihan Editor

Perbezaan antara Inline dan Makro dalam C ++

Makro adalah arahan yang mengembang pada masa penyerahannya. Fungsi juga boleh ditakrifkan, seperti makro. Begitu juga, fungsi inline juga berkembang pada titik penyerahannya. Satu perbezaan utama antara fungsi inline dan makro ialah fungsi inline diperluaskan semasa penyusunan, dan makro diperluaskan apabila program diproses oleh preprocessor .

Mari kita mengkaji perbezaan antara inline dan makro dengan bantuan carta perbandingan.

Carta Perbandingan

Asas untuk PerbandinganDalam barisanMakro
AsasFungsi inline dikutip oleh pengkompil.Makro diperluaskan oleh preprocessor.
Sintaksinline return_type funct_name (parameter) {. . . }#define macro_name char_sequence
Kata kunci Digunakandalam barisan
#define
DitakrifkanIa boleh ditakrifkan di dalam atau di luar kelas.Ia sentiasa ditakrifkan pada permulaan program.
PenilaianIa menilai hujah sekali sahaja.Ia menilai hujah setiap kali ia digunakan dalam kod.
PengembanganPengkompil mungkin tidak sebaris dan mengembangkan semua fungsi.Macros sentiasa diperluaskan.
AutomasiFungsi pendek yang ditakrifkan di dalam kelas secara automatik dibuat ke fungsi inline.Makro harus ditakrifkan secara khusus.
MengaksesFungsi ahli sebaris boleh mengakses ahli data kelas.Makro tidak boleh menjadi ahli kelas dan tidak dapat mengakses ahli data kelas.
PenamatanDefinisi fungsi sebaris tamat dengan kurungan kurungan pada akhir fungsi sebaris.Takrif macro tamat dengan barisan baru.
DebuggingDebugging mudah untuk fungsi sebaris sebagai pemeriksaan ralat dilakukan semasa penyusunan.Debugging menjadi sukar bagi makro kerana pemeriksaan ralat tidak berlaku semasa penyusunan.
MengikatFungsi inline mengikat semua pernyataan dalam badan fungsi dengan baik sebagai badan fungsi bermula dan berakhir dengan kurungan keriting.Makro menghadapi masalah mengikat jika ia mempunyai lebih daripada satu pernyataan, kerana ia tidak mempunyai simbol penamatan.

Definisi Inline

Fungsi inline kelihatan seperti fungsi biasa tetapi, didahului oleh kata kunci " inline ". Fungsi inline adalah fungsi panjang pendek yang diperluas pada titik penyerahannya, bukannya dipanggil. Mari kita fahami fungsi inline dengan contoh.

 #include menggunakan ruang nama std; contoh kelas {int a, b; awam: inline void initialize (int x, int y) {a = x; b = y} paparan kekosongan () {cout << a << "< 

Dalam program di atas, saya menyatakan dan didefinisikan, fungsi inisialisasi (), sebagai fungsi sebaris dalam "contoh" kelas. Kod fungsi inisialisasi () akan berkembang di mana ia digunakan oleh objek "contoh" kelas. Paparan fungsi (), yang ditakrifkan dalam contoh kelas tidak diisytiharkan sebaris tetapi ia mungkin dianggap sebaris oleh pengkompil, sebagai dalam C ++ fungsi yang ditakrifkan di dalam kelas akan dibuat secara automatik oleh pengkompil memandangkan panjang fungsi.

  • Fungsi inline mengurangkan overhead fungsi panggilan dan kembali yang seterusnya mengurangkan masa pelaksanaan program. Juga, hujah-hujah ditolak ke timbunan dan daftar disimpan apabila fungsi dipanggil dan ditetapkan semula apabila fungsi kembali, yang mengambil masa, ini dielakkan oleh fungsi inline kerana tidak ada keperluan untuk mewujudkan pembolehubah tempatan dan parameter formal setiap kali .
  • Fungsi inline boleh menjadi ahli kelas dan juga boleh mengakses ahli data kelas.
  • Fungsi inline mengurangkan masa pelaksanaan program tetapi, kadang kala jika panjang fungsi inline lebih besar maka saiz program juga akan meningkat kerana kod yang diduplikasi. Oleh itu, ia adalah satu amalan yang baik untuk sebaris fungsi kecil.
  • Argumen fungsi inline hanya dinilai sekali sahaja.

Definisi makro

Makro adalah "arahan preprocessor". Sebelum penyusunan, program ini diperiksa oleh preprocessor dan di mana pun ia mendapati makro dalam program, ia menggantikan makro dengan definisi. Oleh itu, makro dianggap sebagai "penggantian teks". Marilah kita mengkaji makro dengan contoh.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Greater of 10 and 20 is" << GREATER ("20", "10" << "\ n"; kembali 0; } 

Dalam kod di atas, saya mengisytiharkan fungsi makro GREATER (), yang membandingkan dan mencari bilangan lebih besar kedua-dua parameter. Anda boleh amati bahawa tiada titik koma untuk menamatkan makro kerana makro ditamatkan hanya dengan baris baru. Sebagai makro hanya pengganti teks, ia akan mengembangkan kod makro di mana ia digunakan.

  • Makro sentiasa ditakrifkan dalam huruf besar hanya untuk memudahkan para pengaturcara mengenal pasti semua makro dalam program semasa membaca.
  • Makro tidak boleh menjadi fungsi ahli kelas, ataupun ia boleh mengakses ahli data mana-mana kelas.
  • Fungsi makro menilai hujah setiap kali ia muncul dalam takrifnya yang mengakibatkan hasil yang tidak dijangka.
  • Makro mestilah saiz yang lebih kecil kerana makro yang lebih besar tidak perlu meningkatkan saiz kod.

Perbezaan Utama Antara Inline dan Makro

  1. Perbezaan asas antara inline dan makro ialah fungsi inline dipecahkan oleh pengkompil sedangkan, makro dalam suatu program dikembangkan oleh preprocessor.
  2. Kata kunci yang digunakan untuk menentukan fungsi inline adalah " inline " sedangkan, kata kunci yang digunakan untuk menentukan makro adalah " #define ".
  3. Sebaik sahaja fungsi sebaris adalah decalre di dalam kelas, ia boleh ditakrifkan sama ada di dalam kelas atau di luar kelas. Sebaliknya, makro sentiasa ditakrifkan pada permulaan program.
  4. Hujah yang disampaikan kepada fungsi inline dinilai hanya satu kali semasa penyusunan sementara, hujah makro dinilai setiap kali makro digunakan dalam kod.
  5. Pengkompil mungkin tidak sebaris dan mengembangkan semua fungsi yang ditakrifkan di dalam kelas. Sebaliknya, makro sentiasa diperluas.
  6. Fungsi pendek yang ditakrifkan di dalam kelas tanpa kata kunci sebaris secara automatik dibuat fungsi sebaris. Sebaliknya, makro harus ditakrifkan secara khusus.
  7. Fungsi yang sebaris boleh mengakses ahli kelas sedangkan makro tidak boleh mengakses ahli kelas.
  8. Untuk menamatkan fungsi sebaris pendakap kerinting tertutup diperlukan manakala makro ditamatkan dengan permulaan barisan baru.
  9. Debugging menjadi mudah untuk fungsi inlne kerana ia diperiksa semasa penyusunan untuk sebarang kesilapan. Sebaliknya, makro tidak diperiksa semasa penyusunannya, debugging makro menjadi sukar.
  10. Menjadi fungsi fungsi inline mengikat anggotanya dalam permulaan dan menutup pendakap kerinting. Sebaliknya, makro tidak mempunyai sebarang simbol penamatan sehingga, mengikat menjadi sukar apabila makro mengandungi lebih banyak lagi satu pernyataan.

Kesimpulan:

Fungsi inline jauh lebih meyakinkan daripada fungsi makro. C ++ juga menyediakan cara yang lebih baik untuk menentukan pemalar, yang menggunakan kata kunci "const".

Top