Типы в C Макросы - PullRequest
       15

Типы в C Макросы

3 голосов
/ 28 декабря 2010

Я пробую свои силы в 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 Ответ

2 голосов
/ 28 декабря 2010

То, что вы сделали, должно сработать, у вас просто две маленькие опечатки:

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

Первая строка имела x вместо v, а вторая была названа vp_upack.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...