私はCで私の手を試していると私は次のマクロを記述するのが賢明だろうと思った:タイプ
// takes address of a variable and passes it on as a void*
#define vp_pack(v) ((void*)&x)
// takes a void pointer and dereferences it to t
#define vp_upack(v,t) (*((t*)v))
そして、私はこのようにそれをテスト:
int
main()
{
int five = 5;
char a = 'a';
vp ptr;
// Test 1
ptr = vp_pack(five);
if(vp_unpack(ptr,int) == five)
printf("Test 1 passed\n");
else
fprintf(stderr, "Test 1: all is doomed\n");
// Test 2
ptr = vp_pack(a);
if(vp_unpack(ptr,char) == a)
printf("Test 2 passed\n");
else
fprintf(stderr, "Test 2: all is doomed!\n");
}
しかしgcc
は私のところでerror: expected expression before 'int'
のような外来語を吐き出す。
私はこの1日を過ごしましたが、それでもコードに何が間違っているのか理解できません。誰か私にこれを説明できますか?
また、私は専門職によるプログラマーではありません。私はITで働いていませんが、これは私の趣味です。だから、もしこれをやるより良い方法を教えてくれる人がいれば、そうしてください。
ありがとうございます!
'#define vp_pack(v)((void *)&x)'が間違って見えますか? x!= v – ismail
はい、そうでした。以下の答えは正しいです。 – jst