sizeof (void) равно 1 в C?

Возможный дубликат:
Каков размер пустоты?

Всем привет ! Я использую gcc для компиляции моих программ на C, только что случайно обнаружил, что sizeof (void) составляет 1 байт в C.

Есть ли объяснения для этого? Я всегда думал, что это ZERO (если он действительно ничего не хранит)!

Спасибо !

Это нестандартное расширение gcc, но имеет обоснование. Когда вы выполняете арифметику указателя, добавляя или удаляя одну единицу, это означает добавление или удаление объекта, указывающего на размер. Таким образом, определение sizeof(void) как 1 помогает определить void* в качестве указателя на байт (нетипизированный адрес памяти). В противном случае у вас было бы удивительное поведение, используя арифметику указателя, такую ​​как p+1 == p когда p является void* .

Стандартный способ состоял бы в том, чтобы использовать `char * для этой цели (указатель на байт).

это специальная функция gcc – см. здесь http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith

или же

Каков размер пустоты?

Обычно вы не запрашиваете sizeof(void) так как вы никогда не используете void как тип. Я предполагаю, что поведение, которое вы экспериментируете, зависит от конкретного компилятора. На моем gcc он также возвращает 1.