如何获取C Macro中声明的变量的地址?

Ken*_*n T 2 c macros memcpy

我是C的新手,正在尝试一些宏观陈述.我有这样一条线:

#define write_data(src, TYPE, VALUE ) (write_implement(src, sizeof(TYPE), &(VALUE)))
Run Code Online (Sandbox Code Playgroud)

在以后的函数中,我想memcpy用来复制VALUE另一个内存区域.像这样:

void write_implement (void* src, int size_of_type, void* value)
{
    //whatever, just making the destination address from the source address
    void* dest = src + 4096;
    memcpy(dest, value, size_of_type);
}
Run Code Online (Sandbox Code Playgroud)

传入的VALUE可以是任何类型的数据.这就是为什么我使用void*指向它和memcpy来复制字节大小的数量.

但它当然不起作用:)

这就是我调用函数的方式:

write_data(addr, int, i*3); // i is a whatever integer variable
Run Code Online (Sandbox Code Playgroud)

GCC给了我这个:

错误:左值作为一元'&'操作数

有没有人知道如何找到传入宏的变量的地址,以便允许我使用地址进行复制?

可以更改宏的后半部分("write_implement"和参数,但不能更改"write_data"参数).实施部分也可以自由更改.

caf*_*caf 5

如果您的编译器支持C99复合文字,您可以这样做:

#define write_data(src, TYPE, VALUE) write_implement(src, sizeof(TYPE), &(TYPE){ VALUE })
Run Code Online (Sandbox Code Playgroud)