Страница 1 из 1

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

Добавлено: Ср мар 03, 2021 09:45:22
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...

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

Добавлено: Ср мар 03, 2021 10:46:11
Reflector
Ничего не выйдет, препроцессор даже 2+2 посчитать не может.

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

Добавлено: Ср мар 03, 2021 11:00:48
sunjob
даже 2+2 посчитать не может.
лоботряс, блин, а?! :)))

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

Добавлено: Чт мар 04, 2021 09:49:26
NStorm
Да не, правильно говорят. Расчет происходит на этапе компиляции. Поэтому нельзя без внешних скриптов.

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

Добавлено: Ср мар 17, 2021 20:19:02
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`). Больше нигде.

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