2010-12-28 5 views
3

私は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で働いていませんが、これは私の趣味です。だから、もしこれをやるより良い方法を教えてくれる人がいれば、そうしてください。

ありがとうございます!

+1

'#define vp_pack(v)((void *)&x)'が間違って見えますか? x!= v – ismail

+0

はい、そうでした。以下の答えは正しいです。 – jst

答えて

2

あなたが動作するはずやった、あなたはちょうど2つの小さなタイプミスがあります

#define vp_pack(v) ((void*)&v) 
#define vp_unpack(v,t) (*((t*)v)) 

最初の行はx代わりのvを、持っていた第二vp_upackと命名されました。

+0

あなたは今、私のヒーローなんです! – jst