Преобразование аргумента: (нормальный) указатель на пустой указатель, приведение необходимо?
При назначении или из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
-указатель?