2011-12-01 643 views
0

我正在嘗試使用一個特殊的指針,並保證gcc的無效地址。這是我做的:特殊指針值((void *)1)

#define MY_VALUE_OK ((void*)1); 
... 
int*   data; 
... 
void* d = MY_VALUE_OK; 

if(data != ((void*)1))  // compiles ok 

if(data != d)     // compiles ok 

if(data != MY_VALUE_OK)  // error! 

    printf(" %d", *data); 

任何想法? 理想情況下,我想將這個指針定義爲類中的靜態常量。 順便說一句,這是我以前使用Microsoft Visual Studio進行編譯的舊代碼。

+0

它給你什麼錯誤? – semisight

回答

3

您的#define是否包含分號(與您的示例一樣)?如果這樣可以允許賦值工作,但是if語句會出錯,因爲在文本替換之後,條件內會出現一個分號。

3

您已經定義了一個分號與你的#define

所以......

if(data != MY_VALUE_OK) 

實際上變成:

if(data != ((void*)1);) 

有一個明顯的錯誤

你定義應該是:

#define MY_VALUE_OK ((void*)1) 

這應該解決你的問題:)