【发布时间】:2013-12-24 11:03:09
【问题描述】:
当分配给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)。
与in this answer 相比,建议此调用需要强制转换(以消除-Wformat 警告):
int main(){
int i = 12;
printf("%p\n", &i);
}
但就我而言,GCC 不会抱怨。
那么:将非void-指针传递给需要void-指针的函数时是否需要强制转换?
【问题讨论】:
标签: c pointers argument-passing