Rumah > pembangunan bahagian belakang > C++ > Perbezaan antara makro dan fungsi dalam C

Perbezaan antara makro dan fungsi dalam C

王林
Lepaskan: 2023-08-30 23:49:06
ke hadapan
1125 orang telah melayarinya

Perbezaan antara makro dan fungsi dalam C

Dalam bahagian ini, kita akan melihat perbezaan antara makro dan fungsi dalam bahasa C. Makro dipraproses, yang bermaksud bahawa semua makro dipraproses pada masa penyusunan. Fungsi tidak dipraproses, tetapi disusun.

Tiada semakan jenis dilakukan dalam makro, jadi isu dengan pelbagai jenis input mungkin timbul. Dengan fungsi, ini tidak berlaku. Selain itu, jika input makro tidak diselenggara dengan betul, beberapa keputusan tidak sah mungkin dihasilkan. Sila semak prosedur berikut untuk soalan.

Contoh

#include <stdio.h>
#define SQUARE(x) x * x
int sqr(int x) {
   return x*x;
}
main() {
   printf("Use of sqr(). The value of sqr(3+2): %d</p><p>", sqr(3+2));
   printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2));
}
Salin selepas log masuk

Output

Use of sqr(). The value of sqr(3+2): 25
Use of SQUARE(). The value of SQUARE(3+2): 11
Salin selepas log masuk

fungsi dan makro, kita mahu kedua-duanya melaksanakan tugas yang sama, tetapi di sini kita dapat melihat hasil output adalah berbeza. Sebab utama ialah apabila kita lulus 3 + 2 sebagai parameter fungsi, ia ditukar kepada 5 dan kemudian mengira 5 * 5 = 25. Untuk makro, ia melaksanakan 3 + 2 * 3 + 2 = 3 + 6 + 2 = 11.

Oleh itu, makro tidak disyorkan untuk masalah berikut:

  • Tiada semak jenis

  • Lalai untuk mod nyahpepijat kerana makro hanyalah penggantian

  • Makro ruang tidak mempunyai nama Jadi jika makro ditakrifkan dalam satu bahagian, ia boleh digunakan dalam bahagian lain.

  • Makro meningkatkan panjang kod kerana ia ditambah sebelum prapemprosesan.

  • Makro tidak menyemak sebarang ralat masa kompilasi.

Atas ialah kandungan terperinci Perbezaan antara makro dan fungsi dalam C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan