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

时间:2012-01-25 13:23:58

标签: 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或任何其他编译器实现此目的?

1 个答案:

答案 0 :(得分:3)

简短的回答是否定的。将指针投向void*后,您就丢失了所有类型信息。

假设您将void*传递给另一个翻译单元中的函数。在编译其他翻译单元时,编译器无法验证使用该指针执行的任何语义。

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