Обсуждаем контроллеры компании Atmel.
Ответить

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

Ср мар 03, 2021 09:45:22

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

спасибо за пендили и подсказки :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 раз.

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

Ср мар 03, 2021 10:46:11

Ничего не выйдет, препроцессор даже 2+2 посчитать не может.

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

Ср мар 03, 2021 11:00:48

даже 2+2 посчитать не может.

лоботряс, блин, а?! :)))

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

Чт мар 04, 2021 09:49:26

Да не, правильно говорят. Расчет происходит на этапе компиляции. Поэтому нельзя без внешних скриптов.

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

Ср мар 17, 2021 20:19:02

Ничего не выйдет, препроцессор даже 2+2 посчитать не может.

Расчет происходит на этапе компиляции. Поэтому нельзя без внешних скриптов.


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

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

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