例如:
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或任何其他编译器实现此目的?
答案 0 :(得分:3)
简短的回答是否定的。将指针投向void*
后,您就丢失了所有类型信息。
假设您将void*
传递给另一个翻译单元中的函数。在编译其他翻译单元时,编译器无法验证使用该指针执行的任何语义。
如果您希望编译器强制执行强类型,请不要使用void*
。