瓜瓜咚 发表于 2020-9-15 15:37:28

宏定义编译问题

求助大神,这样宏定义函数编译总是通不过,显示取地址符有误,但是原始函数调用中就用了取地址符。另想请问一下宏定义函数的时候可以把外面的变量传进来吗?

xieglt 发表于 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=*(int *)0X40D62814;\
        CCR_Message=*(int *)0X40D6281C;\
        if((*(int *)0X40D62818 == 0X4) && (*(int *)0X40D62820 == 0X4))/*这个 ; 不需要*/\
                *validity = 1;\
        else\
                *validity = 0;

        //调用宏。没有看到完整代码,只能这么写了。
        //宏定义的参数不需要指定类型,因为宏只是一个替换,不能做类型识别,函数才能做类型识别
        //另外在c++里,& 不光是取址符号,还是引用符号,如果你定义的不是宏而是函数,传指针要用 * 而不是 &,
        voidMarcoTest()
        {
                int CCRPortId,len,validity,ret;
                int CCR_Message = {0};
                READ_SAMPLING_MESSAFE(CCRPortId,CCR_Message,&len,&validity,&ret)
        }
页: [1]
查看完整版本: 宏定义编译问题