当给一个 void
指针赋值或从中赋值时,不需要进行强制类型转换(C99 §6.3.2.2 sub 1 / §6.5.16.1 sub 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
指针的函数时,需要转换吗?
printf
原型中的...
)相关的参数。 - ouah