Вывести значение значение константы директивой препроцессора
От: poilk  
Дата: 08.07.04 11:21
Оценка:
Есть код:
#if (KEYCODE_LENGTH != 1000)
#error keycode length changed
#endif

А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя.
Помогите, плиз...
... << RSDN@Home 1.1.3 stable >>
Re: Вывести значение значение константы директивой препроцес
От: Vamp Россия  
Дата: 08.07.04 11:22
Оценка:
printf("%d", KEYCODE_LENGTH);
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Вывести значение значение константы директивой препро
От: poilk  
Дата: 08.07.04 11:37
Оценка:
Здравствуйте, Vamp, Вы писали:

V>
V>printf("%d", KEYCODE_LENGTH);
V>


Так в том-то и дело, что файл не компилится...
... << RSDN@Home 1.1.3 stable >>
Re[3]: Вывести значение значение константы директивой препро
От: Korikoff Pavel Россия http://www.intrice.com/
Дата: 08.07.04 11:44
Оценка:
Здравствуйте, poilk, Вы писали:

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


V>>
V>>printf("%d", KEYCODE_LENGTH);
V>>


P>Так в том-то и дело, что файл не компилится...


Ну так уберите:
#error keycode length changed
Re[4]: Вывести значение значение константы директивой препро
От: poilk  
Дата: 08.07.04 11:53
Оценка:
Здравствуйте, Korikoff Pavel, Вы писали:

KP> Ну так уберите:

KP>
KP>#error keycode length changed
KP>

Логично, конечно, но эта строка указывает на то, что константа неправильно вычислена. Если ее убрать, ошибка может появится в совершенно неожиданном месте, эти константы там по всему коду разбросаны...
... << RSDN@Home 1.1.3 stable >>
Re[5]: Вывести значение значение константы директивой препро
От: Vamp Россия  
Дата: 08.07.04 11:56
Оценка:
Давайте попробуем еще раз.
Вы спрашиваете, как вывыести на экране значение? Отключить еррор, распечатать принтом, посмотреть, чему он равен, предпринять меры, включить еррор.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Вывести значение значение константы директивой препро
От: poilk  
Дата: 08.07.04 12:20
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Давайте попробуем еще раз.

V>Вы спрашиваете, как вывыести на экране значение? Отключить еррор, распечатать

Я спрашиваю, как вывести значение директивой препроцессора, и, видимо, никак не получится. Но все равно, спасибо за участие.
... << RSDN@Home 1.1.3 stable >>
Re: Вывести значение значение константы директивой препроцес
От: rus blood Россия  
Дата: 08.07.04 12:39
Оценка:
Здравствуйте, poilk, Вы писали:

P>Помогите, плиз...


Если бы константа была литеральная, то можно было бы использовать #pragma message...
Ну думаю, тебе это не подойдет...
Имею скафандр — готов путешествовать!
Re[7]: Вывести значение значение константы директивой препро
От: korzhik Россия  
Дата: 08.07.04 12:42
Оценка:
Здравствуйте, poilk, Вы писали:

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


V>>Давайте попробуем еще раз.

V>>Вы спрашиваете, как вывыести на экране значение? Отключить еррор, распечатать

P>Я спрашиваю, как вывести значение директивой препроцессора, и, видимо, никак не получится. Но все равно, спасибо за участие.


невозможно
Re: Вывести значение значение константы директивой препроцес
От: elcste  
Дата: 08.07.04 12:53
Оценка:
Здравствуйте, poilk, Вы писали:

P>Есть код:

P>#if (KEYCODE_LENGTH != 1000)
P>#error keycode length changed
P>#endif

P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран?

#define CONCAT(x) KEYCODE_LENGTH_IS_##x
#define MAKE_IDENT(x) CONCAT(x)
#define PRINT_KEYCODE_LENGTH int error = MAKE_IDENT(KEYCODE_LENGTH)

PRINT_KEYCODE_LENGTH;
Re[8]: Вывести значение значение константы директивой препро
От: korzhik Россия  
Дата: 08.07.04 12:56
Оценка:
Здравствуйте, korzhik, Вы писали:

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


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


V>>>Давайте попробуем еще раз.

V>>>Вы спрашиваете, как вывыести на экране значение? Отключить еррор, распечатать

P>>Я спрашиваю, как вывести значение директивой препроцессора, и, видимо, никак не получится. Но все равно, спасибо за участие.


K>невозможно


я имел ввиду директиву #error
Re[2]: Вывести значение значение константы директивой препро
От: rus blood Россия  
Дата: 08.07.04 13:07
Оценка:
Здравствуйте, elcste, Вы писали:

E>
E>#define CONCAT(x) KEYCODE_LENGTH_IS_##x
E>#define MAKE_IDENT(x) CONCAT(x)
E>#define PRINT_KEYCODE_LENGTH int error = MAKE_IDENT(KEYCODE_LENGTH)

E>PRINT_KEYCODE_LENGTH;
E>


Не работает. Ни в шестерке, ни в семерке
Имею скафандр — готов путешествовать!
Re[3]: Вывести значение значение константы директивой препро
От: elcste  
Дата: 08.07.04 13:52
Оценка:
Здравствуйте, rus blood, Вы писали:

E>>#define CONCAT(x) KEYCODE_LENGTH_IS_##x
E>>#define MAKE_IDENT(x) CONCAT(x)
E>>#define PRINT_KEYCODE_LENGTH int error = MAKE_IDENT(KEYCODE_LENGTH)

E>>PRINT_KEYCODE_LENGTH;


RB>Не работает. Ни в шестерке, ни в семерке


Что такое "шестерка" и "семерка" — MSVC? Если да, то что не работает?

P.S. Или Вы только препроцессируете?
Re[4]: Вывести значение значение константы директивой препро
От: rus blood Россия  
Дата: 08.07.04 13:59
Оценка:
Здравствуйте, elcste, Вы писали:

E>P.S. Или Вы только препроцессируете?


Проблема в том, чтобы получить сообщение на этапе препроцессинга.
Имею скафандр — готов путешествовать!
Re[5]: Вывести значение значение константы директивой препро
От: elcste  
Дата: 08.07.04 14:11
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Проблема в том, чтобы получить сообщение на этапе препроцессинга.


Да, в таком виде задача, конечно, нерешаема.
Re: Вывести значение значение константы директивой препроцес
От: _nn_  
Дата: 08.07.04 14:43
Оценка:
Здравствуйте, poilk, Вы писали:

P>Есть код:

P>
P>#if (KEYCODE_LENGTH != 1000)
P>#error keycode length changed
P>#endif
P>

P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя.
P>Помогите, плиз...

Если бы можно было генерировать макрос, который бы генерировал директиву препроцессора то решить можно было бы.

Есть такой вариант :

#if KEYCODE_LENGTH==0
#error 0
#elif KEYCODE_LENGTH==1
#error 1
//...
#elif KEYCODE_LENGTH==1000
//...
#endif // KEYCODE_LENGTH


Чтобы не делать это самому, можно сделать программу, которая этот текст сделает за вас
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Вывести значение значение константы директивой препроцес
От: genre Россия  
Дата: 08.07.04 14:47
Оценка: :)
Здравствуйте, poilk, Вы писали:

P>Есть код:

P>
P>#if (KEYCODE_LENGTH != 1000)
P>#error keycode length changed
P>#endif
P>

P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя.
P>Помогите, плиз...
методом тыка
#if KEYCODE_LENGTH>1000
#pragma message("greater")
#else
#pragma message("less")

смотрим на вывод, меняем 1000 на соответсвенно большее или меньшее
и до победного конца.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Вывести значение значение константы директивой препро
От: Maslex  
Дата: 08.07.04 14:47
Оценка:
Здравствуйте, elcste, Вы писали:

E>Здравствуйте, rus blood, Вы писали:


RB>>Проблема в том, чтобы получить сообщение на этапе препроцессинга.


E>Да, в таком виде задача, конечно, нерешаема.


Почему не решаема.
А файлики .i разве кто-то отменял.

Достаточно поставить где-то перед error-ом

некую строку вида:

keycode_length = KEYCODE_LENGTH

Далее — отпрепоцессировать файл включив опцию /P для MSVC.
Получится файлик .i — в котором будет строка keycode_length = <искомая величина>

или я не совсем понял задачу так сказать?
... << RSDN@Home 1.1.3 stable >>
WBR,
Maslex
Re[7]: Вывести значение значение константы директивой препро
От: rus blood Россия  
Дата: 08.07.04 15:10
Оценка:
Здравствуйте, Maslex, Вы писали:


M>или я не совсем понял задачу так сказать?


Так можно проще и определение этого define-а посмотреть в исходниках...
Имею скафандр — готов путешествовать!
Re: Вывести значение значение константы директивой препроцес
От: Dmi3evS Россия http://dmi3s.blogspot.com/
Дата: 09.07.04 07:26
Оценка: 38 (1)
Здравствуйте, poilk, Вы писали:

P>Есть код:

P>
P>#if (KEYCODE_LENGTH != 1000)
P>#error keycode length changed
P>#endif
P>

P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя.
P>Помогите, плиз...


#include <boost/preprocessor/slot/slot.hpp>
#include <boost/preprocessor/stringize.hpp>


#define LENGTH 1300
#define KEYCODE_LENGTH LENGTH*2+17


#define BOOST_PP_VALUE XXX
#include BOOST_PP_ASSIGN_SLOT(1)

#pragma message( "XXX is " BOOST_PP_STRINGIZE(BOOST_PP_SLOT(1)) )


IMHO, очень жестокая техника. Но если очень надо...
... << Rsdn@Home 1.1.4 beta 1 >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.