Mari kita pelajari perbedaan antara inline dan makro dengan bantuan grafik perbandingan.
Grafik perbandingan
Dasar untuk Perbandingan | Di barisan | Makro |
---|---|---|
Dasar | Fungsi sebaris diuraikan oleh kompiler. | Macro diperluas oleh preprocessor. |
Sintaksis | inline return_type funct_name (parameter) {. . . } | #define macro_name char_afterence |
Kata kunci yang digunakan | Di barisan | #menetapkan |
Didefinisikan | Itu dapat didefinisikan di dalam atau di luar kelas. | Itu selalu didefinisikan pada awal program. |
Evaluasi | Ini mengevaluasi argumen hanya sekali. | Ini mengevaluasi argumen setiap kali digunakan dalam kode. |
Ekspansi | Kompiler mungkin tidak inline dan memperluas semua fungsi. | Makro selalu diperluas. |
Otomatisasi | Fungsi pendek, didefinisikan di dalam kelas secara otomatis dibuat ke fungsi sebaris. | Makro harus didefinisikan secara spesifik. |
Mengakses | Fungsi anggota inline dapat mengakses data anggota kelas. | Makro tidak pernah bisa menjadi anggota kelas dan tidak dapat mengakses data anggota kelas. |
Penghentian | Definisi fungsi sebaris berakhir dengan kurung keriting di akhir fungsi sebaris. | Definisi makro berakhir dengan baris baru. |
Debugging | Debugging mudah untuk fungsi inline karena pemeriksaan kesalahan dilakukan selama kompilasi. | Debugging menjadi sulit untuk makro karena pengecekan kesalahan tidak terjadi selama kompilasi. |
Mengikat | Fungsi inline mengikat semua pernyataan dalam tubuh fungsi dengan sangat baik saat tubuh fungsi mulai dan berakhir dengan kurung keriting. | Makro menghadapi masalah yang mengikat jika memiliki lebih dari satu pernyataan, karena tidak memiliki simbol terminasi. |
Definisi Inline
Fungsi sebaris terlihat seperti fungsi biasa tetapi, didahului dengan kata kunci " sebaris ". Fungsi sebaris adalah fungsi panjang pendek yang diperluas pada titik pemanggilannya, alih-alih dipanggil. Mari kita memahami fungsi sebaris dengan contoh.
#include using namespace std; contoh kelas {int a, b; publik: inline void inisialisasi (int x, int y) {a = x; b = y} tampilan batal () {cout << a << "" <Dalam program di atas, saya menyatakan dan mendefinisikan, fungsi inisialisasi (), sebagai fungsi inline di kelas "contoh". Kode fungsi inisialisasi () akan memperluas di mana ia dipanggil oleh objek dari kelas "contoh". Tampilan fungsi (), didefinisikan dalam contoh kelas tidak dinyatakan inline tetapi dapat dianggap inline oleh kompiler, seperti di C ++ fungsi yang didefinisikan di dalam kelas secara otomatis dibuat inline oleh kompiler dengan mempertimbangkan panjang fungsi.
- Fungsi sebaris mengurangi overhead panggilan fungsi dan kembali yang pada gilirannya mengurangi waktu pelaksanaan program. Juga, argumen didorong ke stack dan register disimpan ketika fungsi dipanggil dan reset ketika fungsi kembali, yang membutuhkan waktu, ini dihindari oleh fungsi inline karena tidak perlu membuat variabel lokal dan parameter formal setiap kali .
- Fungsi sebaris dapat menjadi anggota kelas dan juga dapat mengakses data anggota kelas.
- Fungsi sebaris mengurangi waktu pelaksanaan program tetapi, kadang-kadang jika panjang fungsi sebaris lebih besar dari itu, ukuran program juga akan meningkat karena kode duplikat. Oleh karena itu, ini adalah praktik yang baik untuk menyelaraskan fungsi yang sangat kecil.
- Argumen fungsi inline dievaluasi hanya sekali.
Definisi Makro
Makro adalah "arahan preprosesor". Sebelum dikompilasi, program diperiksa oleh preprocessor dan di mana pun ia menemukan makro dalam program, ia menggantikan makro itu dengan definisinya. Oleh karena itu, makro dianggap sebagai "penggantian teks". Mari kita pelajari makro dengan sebuah contoh.
#include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Lebih besar dari 10 dan 20 adalah" << GREATER ("20", "10") << "\ n"; return 0; }
Dalam kode di atas, saya mendeklarasikan fungsi makro GREATER (), yang membandingkan dan menemukan jumlah parameter yang lebih besar. Anda dapat mengamati bahwa tidak ada titik koma untuk mengakhiri makro karena makro hanya diakhiri oleh baris baru. Karena makro hanyalah pengganti teks, makro akan memperluas kode makro di mana ia dipanggil.
- Makro selalu didefinisikan dalam huruf kapital hanya untuk membuatnya mudah bagi programmer untuk mengidentifikasi semua makro dalam program saat membaca.
- Makro tidak pernah bisa menjadi fungsi anggota kelas, juga tidak dapat mengakses data anggota kelas apa pun.
- Fungsi makro mengevaluasi argumen setiap kali muncul dalam definisi yang menghasilkan hasil yang tidak terduga.
- Makro harus berukuran lebih kecil karena makro yang lebih besar tidak akan perlu meningkatkan ukuran kode.
Perbedaan Kunci Antara Inline dan Makro
- Perbedaan mendasar antara inline dan makro adalah bahwa fungsi inline diuraikan oleh kompiler sedangkan, makro dalam program diperluas oleh preprocessor.
- Kata kunci yang digunakan untuk mendefinisikan fungsi inline adalah " inline " sedangkan, kata kunci yang digunakan untuk mendefinisikan makro adalah " #define ".
- Setelah fungsi inline didekor di dalam kelas, itu dapat didefinisikan baik di dalam kelas atau di luar kelas. Di sisi lain, makro selalu ditentukan di awal program.
- Argumen yang diteruskan ke fungsi inline dievaluasi hanya sekali saat kompilasi sedangkan, argumen makro dievaluasi setiap kali makro digunakan dalam kode.
- Compiler mungkin tidak inline dan memperluas semua fungsi yang didefinisikan di dalam kelas. Di sisi lain, makro selalu diperluas.
- Fungsi pendek yang didefinisikan di dalam kelas tanpa kata kunci sebaris secara otomatis dibuat fungsi sebaris. Di sisi lain, Makro harus didefinisikan secara spesifik.
- Fungsi yang inline dapat mengakses anggota kelas sedangkan, makro tidak pernah dapat mengakses anggota kelas.
- Untuk mengakhiri fungsi inline diperlukan kurung kurawal tertutup sedangkan, makro diakhiri dengan dimulainya baris baru.
- Debugging menjadi mudah untuk fungsi inlne karena diperiksa selama kompilasi untuk setiap kesalahan. Di sisi lain, makro tidak diperiksa saat kompilasi jadi, men-debug makro menjadi sulit.
- Sebagai fungsi, fungsi inline mengikat anggotanya dalam kurung kurawal dan tertutup. Di sisi lain, makro tidak memiliki simbol terminasi sehingga, mengikat menjadi sulit ketika makro berisi lebih dari satu pernyataan.
Kesimpulan:
Fungsi sebaris jauh lebih meyakinkan daripada fungsi makro. C ++ juga menyediakan cara yang lebih baik untuk mendefinisikan konstanta, yang menggunakan kata kunci “const”.