Um da drauf noch einmal zurück zu kommen.
Die Fehlermeldung schmeißt codepad im C++ Modus mit G++ als Compiler, da Codepad hier in den Parametern, die ses an den Compiler übergibt, angibt, dass keine GCC-Extensions verwendet werden sollen.
Kompiliert man das ganze hingegen in Codepad als C, bekommt man auch mit Codepad das Ergebnis, welches ich oben gepostet hatte, dass nämlich der sizeof da hin muss, damit das gewünschte Ergebnis produziert wird, da Codepad fürC-Code nicht die implizit genutzen GCC-Extensions deaktiviert, die selbst dann im gcc aktiv sind, wenn man kein gnu99, sondern c99 als Standard angibt, sofern man sie nicht explizit deaktiviert.
Im Gegensatz zu striktem Standard-C bzw. Standard-C++ definieren die GNU-Extensions nämlich tatsächlich void*-Arithmetic und zwar als byte-arithmetic:
wikipedia hat geschrieben:
Pointer arithmetic cannot be performed on void pointers because the void type has no size, and thus the pointed address can not be added to, although gcc and other compilers will perform byte arithmetic on void* as a non-standard extension. For working "directly" with bytes they usually cast pointers to BYTE*, or unsigned char* if BYTE is not defined in the standard library used.
Quelle:
http://en.wikipedia.org/wiki/Pointer_(c ... nd_C.2B.2B
EDIT:
Hmm, scheint nicht an Codepads Übergabeparametern zu liegen, sondern tatächlich nur in GCC standardmäßig aktiviert zu sein und nicht in G++.
Das ist auch interessant:
6.22 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.
The option -Wpointer-arith requests a warning if these extensions are used.
Quelle:
http://gcc.gnu.org/onlinedocs/gcc-4.5.0 ... nter-Arith
sizeof(void) LOL, die Leere hat die Größe 1 :shock:
EDIT 2:
Au Mann, VS kompiliert auch sizeof(void) in C ohne Error, nur mit Warning, dass sizeof 0 zurückgibt.
Netter Runtime-Compilercheck:
:lol: