鱼C论坛

 找回密码
 立即注册
查看: 1900|回复: 1

宏定义编译问题

[复制链接]
发表于 2020-9-15 15:37:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助大神,这样宏定义函数编译总是通不过,显示取地址符有误,但是原始函数调用中就用了取地址符。另想请问一下宏定义函数的时候可以把外面的变量传进来吗?
微信图片_20200915154357.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 03:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表