【发布时间】:2021-05-27 22:27:12
【问题描述】:
#include <stdio.h>
void fun1(int *c){return;}
void fun2(void *p){return;}
void fun3(void **p){return;}
typedef void (* myfunptr)(void *);
void fun4(myfunptr b){
return;
}
int
main(){
int *p;
void *q = p;
fun1(p); //no warning
fun1(q); //no warning
fun2(p); //no warning
fun2(q); //no warning
fun3(&p); //warning - incompatible pointer types
fun3(&q); //no warning
fun4(fun1); //warning - incompatible pointer types
fun4(fun2); //no warning
return 0;
}
我意识到fun3(&p) 的警告是因为void ** 不是像void * 这样的通用指针。但是,我有点疑惑为什么在fun4(fun1) 的情况下会出现警告,因为void * 和int * 是在没有警告的情况下隐式转换的。
我的下一个问题是,除了void * 或void ** 涉及的所有不兼容指针转换,我是否会收到“不兼容类型”的警告。因为使用-Wno-incompatible-pointer-types 会禁用所有类型转换的警告。
【问题讨论】:
标签: c function-pointers implicit-conversion void-pointers