P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя. P>Помогите, плиз...
P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя. P>Помогите, плиз...
P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя. P>Помогите, плиз...
методом тыка
А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя.
Помогите, плиз...
... << RSDN@Home 1.1.3 stable >>
Re: Вывести значение значение константы директивой препроцес
Здравствуйте, Korikoff Pavel, Вы писали:
KP> Ну так уберите: KP>
KP>#error keycode length changed
KP>
Логично, конечно, но эта строка указывает на то, что константа неправильно вычислена. Если ее убрать, ошибка может появится в совершенно неожиданном месте, эти константы там по всему коду разбросаны...
... << RSDN@Home 1.1.3 stable >>
Re[5]: Вывести значение значение константы директивой препро
Давайте попробуем еще раз.
Вы спрашиваете, как вывыести на экране значение? Отключить еррор, распечатать принтом, посмотреть, чему он равен, предпринять меры, включить еррор.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Вывести значение значение константы директивой препро
Здравствуйте, poilk, Вы писали:
P>Здравствуйте, Vamp, Вы писали:
V>>Давайте попробуем еще раз. V>>Вы спрашиваете, как вывыести на экране значение? Отключить еррор, распечатать
P>Я спрашиваю, как вывести значение директивой препроцессора, и, видимо, никак не получится. Но все равно, спасибо за участие.
невозможно
Re: Вывести значение значение константы директивой препроцес
Здравствуйте, korzhik, Вы писали:
K>Здравствуйте, poilk, Вы писали:
P>>Здравствуйте, Vamp, Вы писали:
V>>>Давайте попробуем еще раз. V>>>Вы спрашиваете, как вывыести на экране значение? Отключить еррор, распечатать
P>>Я спрашиваю, как вывести значение директивой препроцессора, и, видимо, никак не получится. Но все равно, спасибо за участие.
K>невозможно
я имел ввиду директиву #error
Re[2]: Вывести значение значение константы директивой препро
P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя. P>Помогите, плиз...
Если бы можно было генерировать макрос, который бы генерировал директиву препроцессора то решить можно было бы.
Здравствуйте, 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]: Вывести значение значение константы директивой препро
DS>IMHO, очень жестокая техника. Но если очень надо...
Плохо, что компилятор понимает только С, так что этот вариант не особо подойдет.
А еще там Solaris и не-Intel процессор, и компилятор какой-то древний, так что приходится писать по-старинке.
Здравствуйте, Maslex, Вы писали:
RB>>>Проблема в том, чтобы получить сообщение на этапе препроцессинга.
E>>Да, в таком виде задача, конечно, нерешаема.
M>Почему не решаема. M>А файлики .i разве кто-то отменял.
Вот-вот, давайте подробнее про файлики .i. Кто и где требует их существования?
Проблема в том, что в рамках стандартного переносимого C/C++ эту задачу нельзя даже сформулировать. Пропроцессинг — только одна из фаз трансляции. Никто не требует, чтобы реализация вообще имела отдельно стоящий препроцессор или могла сохранять результат препроцессирования. (Строго говоря, реализация и не имеет права на такой "наивный" подход: сначала препроцессинг, затем компиляция полученного после препроцессора файла. Просто потому что в этом случае некоторые программы будут работать неверно.)
Re[3]: Вывести значение значение константы директивой препро
P>Плохо, что компилятор понимает только С, так что этот вариант не особо подойдет. P>А еще там Solaris и не-Intel процессор, и компилятор какой-то древний, так что приходится писать по-старинке.
boost/preprocessor — библиотека метапрограммирования на языке препроцессора. И, мне кажется, должна спокойно компилироваться и работать на старых C-шных компиляторах и не-Intel процессорах. Так что если будет желание, то вполне можно попробовать и на вашем страшном звере .
... << Rsdn@Home 1.1.4 beta 1 >>
Re[2]: Вывести значение значение константы директивой препро
Здравствуйте, elcste, Вы писали:
E>(Строго говоря, реализация и не имеет права на такой "наивный" подход: сначала препроцессинг, затем компиляция полученного после препроцессора файла. Просто потому что в этом случае некоторые программы будут работать неверно.)
Это что-то новое или?
Re[3]: Вывести значение значение константы директивой препро
Здравствуйте, rus blood, Вы писали:
RB>Здравствуйте, Дмитрий Бл-й, Вы писали:
ДБЙ>>Рулит?
RB>А вывод числа не задом наперед получиться? RB>А лишних нулей не будет перед числом?
Более того -- число выводится в столбик, цифра за цифрой
Но человеку-то это нужно для отлова ошибочного значения константы при компиляции, тут уж не до красот, можно и потерпеть.
Re[9]: Вывести значение значение константы директивой препро
Здравствуйте, achp, Вы писали:
E>>(Строго говоря, реализация и не имеет права на такой "наивный" подход: сначала препроцессинг, затем компиляция полученного после препроцессора файла. Просто потому что в этом случае некоторые программы будут работать неверно.)
A>Это что-то новое или?
#include <stdio.h>
#define PLUS +
int main()
{
int i = 0;
printf("%d\n", PLUS+i);
}
Каким должен быть результат препроцессинга?
Re[10]: Вывести значение значение константы директивой препр
E>Потому что здесь две лексемы '+' и '+', а не одна '++'.
В самом деле. Но и препроцессинг оказывается на высоте — в результате препроцессинга получается
+ +i
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Вывести значение значение константы директивой препро
На борланде проверил — рулит , надо будет запомнить.
Беда в том, что мой компилятор не понимает #pragma message — пришлось через #error восстанавливать число по одной цифре. Теперь все работает, спасибо!
... << RSDN@Home 1.1.3 stable >>
Re[15]: Вывести значение значение константы директивой препр
Здравствуйте, Vamp, Вы писали:
E>>Потому что здесь две лексемы '+' и '+', а не одна '++'. V>В самом деле. Но и препроцессинг оказывается на высоте — в результате препроцессинга получается V>+ +i
P>А есть способ узнать, какое значение в этот момент имеет KEYCODE_LENGTH? И вывести его на экран? Вычисляется это значение вложенными дефайнами из 5 различных файлов и в этом месте как раз 1000 и должно бы получиться. Код в тех файлах менять, к сожалению, нельзя. P>Помогите, плиз...