我是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"参数).实施部分也可以自由更改.
如果您的编译器支持C99复合文字,您可以这样做:
#define write_data(src, TYPE, VALUE) write_implement(src, sizeof(TYPE), &(TYPE){ VALUE })
Run Code Online (Sandbox Code Playgroud)