标题:
请教 关于C语言宏定义的问题
[打印本页]
作者:
dzbj
时间:
2020-1-11 14:46
标题:
请教 关于C语言宏定义的问题
比如 在keil中 我定义这样一个宏
#define a 1+2
调用时
x=a;
问题
运算过程是 x=3 还是 x=1+2
我理解应该是x=1+2 就是说每次调用a都会进行一次1+2的运算
但这两天看书说 define在编译时就运算完了 要是按书里的说法理解 每次调用a 应该直接就是3而不进行1+2运算
有点糊涂了 应该是哪个
作者:
1402354830
时间:
2020-1-11 15:11
编译时就已经运算完了。
作者:
qiuaqiuqiu
时间:
2020-1-11 17:16
我觉得是第二个,宏定义本身是对程序中特殊命令的预处理,经过预处理后程序就不再包括预处理命令了,最后再由编译程序时——预处理——源程序进行编译处理,得到可供执行的目标代码。所以是x直接是3,a还是1+2,但是在预处理中完成的。
作者:
z77889900111
时间:
2020-1-11 17:27
宏定义就是把定义的宏在程序运行时直接替换 在程序编译的时候a被替换成1+2 所以就变成x=1+2
作者:
tyrl800
时间:
2020-1-11 18:18
就是x=3
作者:
zhai1995
时间:
2020-1-11 19:46
原样替换 ,你理解应该是对的
作者:
zhai1995
时间:
2020-1-11 19:58
你可以自己 验证的 , #define a 1+4 然后 x = a/4; 打印看结果多少 就知道是先加等于5 还是原样替换了。
作者:
yoxi
时间:
2020-1-11 19:58
你这是偷懒!这样的疑问完全是自己可以在C编程器中去验证的事!
作者:
dzbj
时间:
2020-1-11 21:29
zhai1995 发表于 2020-1-11 19:58
你可以自己 验证的 , #define a 1+4 然后 x = a/4; 打印看结果多少 就知道是先加等于5 ...
欧了 你这个方法好 我试试
作者:
dzbj
时间:
2020-1-11 22:09
感谢楼上各位前辈的回复 特别感谢7楼的回复 根据你的建议我验证了一下 情况如下
第一种
#define a 4+4
uchar x;
x=a/4;
结果 x=5
说明是直接替换
第二种
#define a 4+4
uchar b=a;
uchar x=0;
x=b/4;
x=2;
说明编译时已经运算过了
我这么表达可能不太准确 就是说直接调用宏定义的东西 就是直接替换 写什么进去就直接替换成什么 但如果把宏声明给一个变量 在编译时会直接把宏的值运算出来给变量
作者:
工具人2000
时间:
2020-1-12 01:23
我觉得应该是x=1+2
作者:
hantu
时间:
2020-1-12 11:31
宏定义在预编译阶段只是查找替换
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1