Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 检测从void*到错误指针类型的转换_C_Casting - Fatal编程技术网

C 检测从void*到错误指针类型的转换

C 检测从void*到错误指针类型的转换,c,casting,C,Casting,例如: int *k; void* c=(void*)&k; char* x=(char*)c;//outputs a warning or an error int *g=(int *)c;//compiles successfully(without warnings) int *gg = malloc(sizeof(int)); //compiles successfully(without warnings) 使用gcc或任何其他编译器可以实现这一点吗?简短的答案是否定的。一

例如:

int *k;
void* c=(void*)&k;
char* x=(char*)c;//outputs a warning or an error
int *g=(int *)c;//compiles successfully(without warnings)

int *gg = malloc(sizeof(int)); //compiles successfully(without warnings)

使用gcc或任何其他编译器可以实现这一点吗?

简短的答案是否定的。一旦您将指针投射到
void*
,您就丢失了所有类型信息

假设您将
void*
传递到另一个翻译单元中的函数中。在编译另一个翻译单元时,编译器无法验证您对该指针所做的任何操作的语义


如果您希望编译器强制执行强类型,请不要使用
void*

注意,通过
char*
访问
int
在C中完全有效;这是你检查表现的方式。