It is a GCC extension.
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.
If you add the -pedantic
flag it will produce the warning:
warning: wrong type argument to increment
If you want to abide to the standard, cast the pointer to a char*
:
k = 1 + (char*)k;
The standard specifies one cannot perform addition (k+1
) on void*
, because:
Pointer arithmetic is done by treating k
as the pointer to the first element (#0) of an array of void
(C99 §6.5.6/7), and k+1
will return element #1 in this "array" (§6.5.6/8).
For this to make sense, we need to consider an array of void
. The relevant info for void
is (§6.2.5/19)
The void
type comprises an empty set of values; it is an incomplete type that cannot be completed.
However, the definition of array requires the element type cannot be incomplete (§6.2.5/20, footnote 36)
Since object types do not include incomplete types, an array of incomplete type cannot be constructed.
Hence k+1
cannot be a valid expression.