Search code examples
csizeofvoidpointer-arithmetic

Why is void pointer arithmetic allowed in gcc?


The following code is compiling using gcc although void ptr arithmetic is not standard:

int main(){
 int a = 5;
 void* b = (void*) &a;
 b++;
}

Solution

  • This is an extension supported by GCC. It treats a void * like a char *.

    From the gcc docs:

    6.24 Arithmetic on void- and Function-Pointers

    In GNU C, addition and subtraction operations are supported on pointers to void and on pointers to functions. This is done by treating the size of a void or of a function as 1.

    A consequence of this is that sizeof is also allowed on void and on function types, and returns 1.