Преобразование аргумента: (нормальный) указатель на пустой указатель, приведение необходимо?

При назначении или изvoid-поинтер не требуется приведение (C99 §6.3.2.2 подраздел 1 / §6.5.16.1 подраздел 1). Это также верно при прохождении (например,int-) указатель на функцию, которая ожидаетvoid-указатель?

Например:

void foo(void * p){
    // Do something
}

int main(){
    int i = 12;
    foo(&i); // int * to void *: no cast needed?
}

Когда я компилирую это с GCC (4.8.1, MinGW-32), я не получаю ни ошибок, ни предупреждений (с-Wall & -pedantic).

По сравнениюв этом ответе Предполагается, что для этого вызова требуется приведение (для устранения-Wformat предупреждения):

int main(){
    int i = 12;
    printf("%p\n", &i);
}

Но в моем случае GCC нене жалуюсь

Итак: нужны ли броски при прохожденииvoidуказатель на функцию, которая ожидаетvoid-указатель?

Ответы на вопрос(1)

Ваш ответ на вопрос