私は C が初めてで、いくつかのマクロ ステートメントを試しています。次のような行があります。
#define write_data(src, TYPE, VALUE ) (write_implement(src, sizeof(TYPE), &(VALUE)))
そして、後の関数で、別のメモリ ゾーン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);
}
渡される VALUE は、あらゆる種類のデータにすることができます。そのため、void* を使用してそれを指し、memcpy を使用してサイズのバイト数をコピーしています。
しかし、もちろんうまくいきません:)
これは私が関数を呼び出す方法です:
write_data(addr, int, i*3); // i is a whatever integer variable
GCCは私にこれを与えます:
エラー: 左辺値は単項 '&' として必要です オペランド
コピーにアドレスを使用できるようにするために、マクロに渡される変数のアドレスを見つける方法を知っている人はいますか?
マクロの後半部分は変更できます (「write_implement」とパラメーターは変更できますが、「write_data」パラメーターは変更できません)。また、実装部分も自由に変更できます。