2012-01-25 57 views
1

例如:檢測來自無效*鑄造了錯誤的指針類型

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

請注意,通過char *訪問'int'在C中完全有效;這是你如何檢查表示。 –

回答

3

簡短的回答是否定的。一旦你把指針指向void*,你就失去了所有的類型信息。

假設您將void*傳遞給不同翻譯單元中的函數。編譯其他翻譯單元時,編譯器無法驗證您使用該指針進行的任何操作的語義。

如果您希望編譯器強制強打字,請不要使用void*