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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage