Argumentkonvertierung: (normaler) Zeiger auf ungültigen Zeiger, Cast erforderlich?
Bei der Zuweisung zu oder von avoid
-Zeiger wird nicht benötigt (C99 §6.3.2.2 Abs. 1 / §6.5.16.1 Abs. 1). Trifft dies auch zu, wenn ein (zum Beispielint
-) Zeiger auf eine Funktion, die a erwartetvoid
-Zeiger?
Zum Beispiel:
void foo(void * p){
// Do something
}
int main(){
int i = 12;
foo(&i); // int * to void *: no cast needed?
}
Wenn ich dies mit GCC (4.8.1, MinGW-32) kompiliere, erhalte ich weder Fehler noch Warnungen (mit-Wall
& -pedantic
).
Im Gegensatzin dieser Antwort Es wird empfohlen, dass für diesen Aufruf eine Besetzung erforderlich ist (um zu beseitigen)-Wformat
Warnungen):
int main(){
int i = 12;
printf("%p\n", &i);
}
Aber in meinem Fall beschwert sich GCC nicht.
Also: Werden Abdrücke benötigt, wenn ein nichtvoid
-Zeiger auf eine Funktion, die a erwartetvoid
-Zeiger?