|
发表于 2020-9-16 09:28:24
|
显示全部楼层
本帖最后由 xieglt 于 2020-9-16 09:41 编辑
宏不是函数,只是一个替换,"宏定义函数的时候可以把外面的变量传进来"是什么意思,没明白。
比如说你觉得 “hello,world. I love c/c plus plus”太长,而又要经常用,就可以定义为宏
#define _HStr "hello,world. I love c/c plus plus"
这样,编译器一旦在代码里发现 _HStr ,就会用 "hello,world. I love c/c plus plus" 替换
- //不知道这是不是你的完整代码,宏里面并没有用到 len 和 ret
- #define READ_SAMPLING_MESSAFE(CCRPortId,CCR_Message,len,validity,ret) \
- CCR_Message[Afdx_Overhead_Size+Cabinet_Position_Offset]=*(int *)0X40D62814;\
- CCR_Message[Afdx_Overhead_Size+Module_Position_Offset]=*(int *)0X40D6281C;\
- if((*(int *)0X40D62818 == 0X4) && (*(int *)0X40D62820 == 0X4))/*这个 ; 不需要*/\
- *validity = 1;\
- else\
- *validity = 0;
- //调用宏。没有看到完整代码,只能这么写了。
- //宏定义的参数不需要指定类型,因为宏只是一个替换,不能做类型识别,函数才能做类型识别
- //另外在c++里,& 不光是取址符号,还是引用符号,如果你定义的不是宏而是函数,传指针要用 * 而不是 &,
- void MarcoTest()
- {
- int CCRPortId,len,validity,ret;
- int CCR_Message[10] = {0};
- READ_SAMPLING_MESSAFE(CCRPortId,CCR_Message,&len,&validity,&ret)
- }
复制代码 |
|