1、宏定义一个两数相乘
#define MUL(a,b) a*b
代码如下:
#include <stdio.h>
#define MUL(a,b) a*b
int main()
{
int value;
printf("value = %d\n",MUL(2,4));
return 0;
}
2、在虚拟机中运行,利用如下命令进行屏蔽屏蔽头文件,就可以完成宏替换。
gcc -E demo.c -o demo.i
vi demo.i
结果如下:
完成了替换;
按照上面我们很容易算出,value = 8
那么好,我们增加难度,打印出
printf("value = %d\n",MUL(2,4+4);
很明显,这个答案是错误的。那么好,我们在屏蔽头文件看是什么情况。
屏蔽头文件,替换宏后我们发现,是2和4相乘,然后+4,导致了错误。
这也就是在宏定义过程中,通常会碰到的问题。
正确的宏定义如下:
#include <stdio.h>
#define MUL(a,b) (a)*(b)
int main(){
int value;
printf("value = %d\n",MUL(2,4+4));
return 0;
}
进行了正确的 替换:
输出也正确:
ps:作者在面试嵌入式的时候被问到要写一个标准宏,没答上来。
#define MAX(x,y) ((x) < (y)? (x):(y)) (完事查看面经才知道,标准宏应该这样写)
标签:定义,int,demo,value,C语言,屏蔽,MUL,define From: https://blog.csdn.net/weixin_53061242/article/details/137055362