#define и строки
От: Dimaaan  
Дата: 23.06.08 08:49
Оценка:
Выражение типа


#define PROP "qqq"
#if defined PROP=="VALUE"
...
#endif



порождает ошибку препроцессора.
Выход из этой ситуации


#define PROP "qqq"
const char* VAL = "VALUE";

#if defined PROP==VAL
...
#endif


Хотелось бы узнать можно ли каким-либо образом сравнивать строки с помощью препроцессора не делая дополнительных объявлений?
Re: #define и строки
От: Аноним  
Дата: 23.06.08 08:53
Оценка:
Здравствуйте, Dimaaan, Вы писали:
D>Выражение типа
D>
D>#define PROP "qqq"
D>#if defined PROP=="VALUE"
D>...
D>#endif
D>

D>порождает ошибку препроцессора.
D>Выход из этой ситуации
D>
D>#define PROP "qqq"
D>const char* VAL = "VALUE";
D>#if defined PROP==VAL
D>...
D>#endif
D>

D>Хотелось бы узнать можно ли каким-либо образом сравнивать строки с помощью препроцессора не делая дополнительных объявлений?
А самому посмотреть в MSDN описание директивы #if религия не позволяет?
Re: #define и строки
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 23.06.08 09:04
Оценка:
Здравствуйте, Dimaaan, Вы писали:

D>#define PROP "qqq"

D>#if PROP=="VALUE"

Вот так надо.
Re: #define и строки
От: Programador  
Дата: 23.06.08 09:04
Оценка:
Здравствуйте, Dimaaan, Вы писали:

D>порождает ошибку препроцессора.

D>Выход из этой ситуации
Дык препроцессор он С-- а не С++ Вы еще в С поробуйте if(str="QQpp")
Re: #define и строки
От: Bell Россия  
Дата: 23.06.08 09:15
Оценка:
Здравствуйте, Dimaaan, Вы писали:

D>Выражение типа



D>
D>#define PROP "qqq"
D>#if defined PROP=="VALUE"
D>...
D>#endif
D>



D>порождает ошибку препроцессора.

D>Выход из этой ситуации


D>
D>#define PROP "qqq"
D>const char* VAL = "VALUE";

D>#if defined PROP==VAL
D>...
D>#endif
D>


D>Хотелось бы узнать можно ли каким-либо образом сравнивать строки с помощью препроцессора не делая дополнительных объявлений?


Во-первых, выражение PROP==VAL сравнивает указатели, а не строки.
Во-вторых, можно предложить следующий пример для анализа:
#define PROP "VALUE"
const char* VAL = "VALUE";

int n = 0;
#if defined PROP==VAL
n = 1;
#endif

int main() 
{
   cout << n << '\n';
   return 0;
}


В третьих, можно посмотреть на синтаксис директивы define в 16.1.
Любите книгу — источник знаний (с) М.Горький
Re[2]: #define и строки
От: Bell Россия  
Дата: 23.06.08 09:17
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Здравствуйте, Dimaaan, Вы писали:


D>>#define PROP "qqq"

D>>#if PROP=="VALUE"

PC>Вот так надо.

А попробовать скомпилить?
Любите книгу — источник знаний (с) М.Горький
Re[3]: #define и строки
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 23.06.08 09:20
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, php-coder, Вы писали:


PC>>Здравствуйте, Dimaaan, Вы писали:


D>>>#define PROP "qqq"

D>>>#if PROP=="VALUE"

PC>>Вот так надо.

B>А попробовать скомпилить?

Погорячился. Строчку VALUE нужно тоже в #define отдельный вынести тогда, чтобы сработало.
Re[4]: #define и строки
От: Bell Россия  
Дата: 23.06.08 09:23
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Погорячился. Строчку VALUE нужно тоже в #define отдельный вынести тогда, чтобы сработало.

Если так:
#define PROP "VALUE"
#define VAL  "VALUE";

int n = 0;
#if PROP=="VALUE"
n = 1;
#endif


"ComeauTest.c", line 5: error: expression must have integral or enum type
#if PROP=="VALUE"


Если не так — приведи свой вариант
Любите книгу — источник знаний (с) М.Горький
Re[5]: #define и строки
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 23.06.08 09:26
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, php-coder, Вы писали:


PC>>Погорячился. Строчку VALUE нужно тоже в #define отдельный вынести тогда, чтобы сработало.


Не только вынести, но и использовать Вы, видимо, поняли меня слишком буквально, впрочем я тоже мог бы изъясниться поподробнее:

B>Если так:

B>
B>#define PROP "VALUE"
B>#define VAL  "VALUE";

B>int n = 0;
B>#if PROP==VAL
B>n = 1;
B>#endif
B>


Вот так должно работать.
Re[6]: #define и строки
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 23.06.08 09:29
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Вот так должно работать.


*попробовал скомпилить* Угу, должно, но не обязано
Re[6]: #define и строки
От: Bell Россия  
Дата: 23.06.08 10:06
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Не только вынести, но и использовать Вы, видимо, поняли меня слишком буквально, впрочем я тоже мог бы изъясниться поподробнее:


B>>Если так:

B>>
B>>#define PROP "VALUE"
B>>#define VAL  "VALUE";

B>>int n = 0;
B>>#if PROP==VAL
B>>n = 1;
B>>#endif
B>>


PC>Вот так должно работать.


Да, я поторописля. Вот реация Комо на исправленный вариант:

"ComeauTest.c", line 5: error: expression must have integral or enum type
#if PROP==VAL
^

"ComeauTest.c", line 5: error: expression must have integral or enum type
#if PROP==VAL

Любите книгу — источник знаний (с) М.Горький
Re[7]: #define и строки
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 23.06.08 10:12
Оценка:
Здравствуйте, Bell, Вы писали:

B>Да, я поторописля. Вот реация Комо на исправленный вариант:


Да, я тоже поторопился. То, как я полагал, что работает на практике не работает. Как сделать правильно не знаю. Полагаю, что лучше вообще так не делать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.