当分配到void
-pointer 或从-pointer 分配时,不需要强制转换(C99§6.3.2.2sub 1/§6.5.16.1sub 1).将(例如int
- )指针传递给期望void
-pointer 的函数时,这也是正确的吗?
例如:
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); }
但就我而言,海湾合作委员会并没有抱怨.
那么:将非void
指针传递给期望void
-pointer 的函数时需要进行强制转换吗?