sizeof(void) == 1

Наткнулся на забавную вещь. Вот такой код спокойно компилируется GCC (версия 3.4.2 (mingw-special)):

#include <stdio.h>

int main()
{
    void* ptr;

    printf("sizeof(void): %d\\n", sizeof(void));

    ptr = 0;
    printf("before increment: %p\\n", ptr);
    ptr += 1;
    printf("after increment: %p\\n", ptr);

    return 0;
}

-Wall не генерирует никаких предупреждений. После запуска выдаёт следующее:

sizeof(void): 1
before increment: 00000000
after increment: 00000001

Т.е. sizeof(void) равен единице и инкремент void* указателя работает также как для char*. Visual C++ 2005 на этот код говорит:

rabbit.c(7) : warning C4034: sizeof returns 0
rabbit.c(11) : error C2036: 'void *' : unknown size
comments powered by Disqus