2011-12-01 53 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) 

这应该解决你的问题:)