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

Perbezaan antara makro dan fungsi dalam C

王林
王林ke hadapan
2023-08-30 23:49:061103semak imbas

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));
}

Output

Use of sqr(). The value of sqr(3+2): 25
Use of SQUARE(). The value of SQUARE(3+2): 11

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam