关于C语言中宏定义的一个疑问
以前对宏实际使用得比较少,只是定义一下常量之类的,但是最近看《TCP/IP协议卷二》的时候发现里面有这样的用法:
#define MGET(m , how , type) { \ ......... // 中间省略else \(m) = m_retry((how) , (type)); \}struct mbuf *m_retry(i , t)int i , t{ struct mbuf * m; m_reclaim();#define m_retry(i,t) (struct mbuf *)0 MGET(m , i , t);#undef m_retry return (m); }
#include <stdio.h>int sum(int a, int b){ return a+b;}int getsum(int a, int b);int main(){ int a = 5 , b = 4; printf("%d\n",getsum(a,b));#define sum(a,b) 0 printf("%d\n",getsum(a,b)); printf("%d\n",sum(a,b));#undef sum printf("%d\n",getsum(a,b)); return 0;}int getsum(int a, int b){ return sum(a,b);}
int sum(int a, int b){ return a+b;}int getsum(int a, int b);int main(){ int a = 5 , b = 4; printf("%d\n",getsum(a,b)); printf("%d\n",getsum(a,b)); printf("%d\n",0); printf("%d\n",getsum(a,b)); return 0;}int getsum(int a, int b){ return sum(a,b);}