специальное значение указателя ((void *) 1) - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь использовать специальный указатель с гарантированным неверным адресом с gcc.Вот что я делаю:

#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.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

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

, так что ...

if(data != MY_VALUE_OK)

Фактически превращается в:

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

Там есть очевидная ошибка

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

#define MY_VALUE_OK ((void*)1)

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

3 голосов
/ 01 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...