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

Любые идеи? В идеале я хотел бы определить этот указатель как static const в классе. BTW, это мой старый код, который использовался для компиляции с Microsoft Visual Studio.

+0

Какая у вас ошибка? – semisight

ответ

3

Включает ли ваш #define полуточку (например, ваш пример)? Если это так, что позволит присваивать работу, но инструкция if будет выходить из строя, потому что после подстановки текста внутри условного выражения будет точка с запятой.

3

Вы определили точку с запятой с #define

так ...

if(data != MY_VALUE_OK) 

На самом деле превращается в:

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

Существует очевидная ошибка там

Ваш определение должно быть:

Это должно исправить вашу проблему :)

Смежные вопросы