Зачем два макроса
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 30.07.05 10:24
Оценка:
Вот в постах увидел такое явление:

#define __STR(x) #x
#define STR(x) __STR(x)


ну или в таком же духе.

Можете мне рассказать, зачем определять два макроса? Чем вариант
#define STR(x) #x


хуже.

thnx
Re: Зачем два макроса
От: anvaka Украина Yasiv
Дата: 30.07.05 12:07
Оценка:
Здравствуйте, BitField, Вы писали:

Если мне не изменяет память, то там вопрос был о том, как можно уже созданное значние макроса преобразовать в строку... т.е. один #define уже есть в самой программе. если написать
#define HELLO HelloWorld
#define STR(x) #x
/* ... */
printf(STR(HELLO));


то требуемого значения не получим. На экране будет HELLO, вместо HelloWorld'a
Re: Зачем два макроса
От: MaximE Великобритания  
Дата: 30.07.05 12:16
Оценка:
On Sat, 30 Jul 2005 14:24:03 +0400, BitField <16909@users.rsdn.ru> wrote:

>

> Вот в постах увидел такое явление:
>
>

>

> #define __STR(x) #x
> #define STR(x) __STR(x)
>

>
> ну или в таком же духе.
>
> Можете мне рассказать, зачем определять два макроса? Чем вариант
>
> #define STR(x) #x
>

>
> хуже.

Второй вариант хуже тем, что он не работает.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[2]: Зачем два макроса
От: BitField Украина http://lazy-bitfield.blogspot.com
Дата: 30.07.05 13:16
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Второй вариант хуже тем, что он не работает.


Не, второй вариант работает ( по крайней мере — на gcc 3.3 и 4.0), но не совсем так, как нужно.
Как заметил anvaka — макросы он раскрывать не умеет.
Но все равно спасибо, тем более, что, каюсь, первый вариант был из Вашего поста.

Просто свой вопрос я задал без привязки к конкретному сообщению.

Все, ответ ясен — два макроса для того, чтобы при передаче как параметра другого (третьего ) макроса тот раскрывался.

Спасибо
Re: Зачем два макроса
От: korzhik Россия  
Дата: 30.07.05 18:51
Оценка:
Здравствуйте, BitField, Вы писали:


BF>Вот в постах увидел такое явление:


BF>

BF>

BF>#define __STR(x) #x
BF>#define STR(x) __STR(x)
BF>


BF>ну или в таком же духе.


BF>Можете мне рассказать, зачем определять два макроса? Чем вариант

BF>
BF>#define STR(x) #x
BF>


здесь
Автор: Андрей Тарасевич
Дата: 27.04.03
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.