Препроцессор, печать значения

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 619
Зарегистрирован: Ср дек 08, 2010 19:03:17

Сообщение sunjob »

хотелось-бы, конечно, что-бы все уже было посчитано :)))

спасибо за пендили и подсказки :beer:

Код: Выделить всё

#define __VAL(x) #x
#define   VAL(x) __VAL(x)

#define OCR_CNT (((F_CPU)/(TIMER_FREQ_HZ*TIMER_DIV))-1)
#pragma message "OCR_CNT = " VAL(OCR_CNT)
-->
timer2.h:31:9: note: #pragma message: OCR_CNT = (((18000000UL)/(100*1024))-1)
#pragma message "OCR_CNT = " VAL(OCR_CNT)
tag: avr,avr-gcc,preprocessor

###!!! UPDATE !!!###

как нужно извернуться, что-бы вся подобная математика "считалась" и в код подставлялись уже готовые константы?!

т.е. без извратов типа "внешние скрипты", awk/bc etc...
Последний раз редактировалось sunjob Чт мар 04, 2021 05:30:11, всего редактировалось 1 раз.
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

Ничего не выйдет, препроцессор даже 2+2 посчитать не может.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 619
Зарегистрирован: Ср дек 08, 2010 19:03:17

Сообщение sunjob »

даже 2+2 посчитать не может.
лоботряс, блин, а?! :)))
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Да не, правильно говорят. Расчет происходит на этапе компиляции. Поэтому нельзя без внешних скриптов.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="Reflector",url="/forum/viewtopic.php?p=3990770#p3990770"]Ничего не выйдет, препроцессор даже 2+2 посчитать не может.[/uquote]
[uquote="NStorm",url="/forum/viewtopic.php?p=3991381#p3991381"]Расчет происходит на этапе компиляции. Поэтому нельзя без внешних скриптов.[/uquote]

Не надо писать чушь.

Препроцессор, разумеется, обязан полностью поддерживать целочисленную арифметику. И там, где он обязан вычислять целочисленные выражения - там он будет все честно вычислять. Надо только помнить, что единственным контекстом, в котором препроцессор должен вычислять целочисленные выражения, является выражение-аргумент директивы `#if` (и `#elif`). Больше нигде.

Во всех остальных контекстах препроцессор занимается лишь текстовой подстановкой.
Реклама
Ответить

Вернуться в «AVR»