LINUX.ORG.RU

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

 , ,


0

1

добрый день!

непонятно, почему печать выводит «исходную формулу» а не «конечное число» по идее, препроцессор должен подставлять конечный результат (ну или я ошибаюсь)

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

#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 (всего исправлений: 3)

по идее, препроцессор должен подставлять конечный результат (ну или я ошибаюсь)

Ошибаешься. Не должен. Препроцессор ничего не вычисляет, а тупо подставляет текст. (За исключением выражений в #if, где он может делать немного арифметики, но тебе её не покажет.)

ilammy ★★★
()
Ответ на: комментарий от ilammy

ошибаюсь?! а то!!! ну вот и славно, трам пайрамм :о)

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

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob
нопеши свой припрацсар, это же не сложно, 
тока ригулярки надо знать и всё. а хотя может 
быть и сложно, если eval не использавать 
(но тогда можно бизон или як взять). но вот 
канкретно тваи цыфры проще вуме посчитать. 
да.
anonymous
()
Ответ на: комментарий от anonymous

тваи цыфры проще вуме посчитать.

прям, блин, белые стихи... на каменной плите.. :о)

а мАи цЫфирЫ пусь уж лучшА перецересперастор считает и вставляет куда надо... а мы тут лучшА пАкурим

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

а мы тут лучшА пАкурим

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

anonymous
()
Ответ на: комментарий от anonymous

а вы бы лучше, книжки читали... с правильными буквами ... :о))) а то ... сначало, подонковский сленг, потом стиль мышления, потом поступки такие-же... бяда... :о) тут ни чего и доказывать не надо :о)

п.с. по теме... ну что же? нет так нет... и на том спасибо :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 3)
Ответ на: комментарий от sunjob

потом поступки такие-же… бяда… :о) тут ни чего и доказывать не надо

абидна, конечна, я тут тибе решение придумаваю, а ты миня падонком абзываеш

$ cat message.c
#define F_CPU           18000000UL
#define TIMER_FREQ_HZ   100
#define TIMER_DIV       1024
#define OCR_CNT (((F_CPU)/(TIMER_FREQ_HZ*TIMER_DIV))-1)
#pragma message "OCR_CNT=" (OCR_CNT+1)/100-1
int main() {return 0;}

$ gcc -E message.c | awk '/#pragma message/ {gsub(/"/, "",$3); printf $3; system("echo " "\047" $4 "\047" " | bc")}'
OCR_CNT=174

заметь, что там не проста OCR_CNT, а (OCR_CNT+1)/100-1, патамушта awk считает буквы UL в летерале как почимута 99.

лучше, книжки читали… с правильными буквами

я ман авк токашто читал на английском

anonymous
()
Ответ на: комментарий от anonymous

awk считает

а не, не авк, а тупорылый bc. извените.

// ты ещё учти, что я гуглокапчу на каждое саабщение разгадываю и кто тут посе этава падонак?

anonymous
()
Ответ на: комментарий от anonymous

а ты миня падонком абзываеш

вот уж неправда, а?! я стиль языка-коверканья так называю!

надеюсь, что вам со временем, все таки, захочется и изъясняться чистой речью ... :о)

sunjob ★★★★
() автор топика
Ответ на: гуглокапчу от sunjob

безграматный, гуглокапча — эта капча от гугла

ты извинятся планируеш или мне макскома позвать?

anonymous
()

Весь SO забит этим вопросом
https://stackoverflow.com/questions/53887316/how-do-i-print-a-constant-value-... вот например. В основном делают неимплементированный шаблон PrintMe<вычисляемая_константа> и gcc ругается на PrintMe<123>. Или спавнять ворнинг так чтобы gcc вывел число. Был фокус со struct { int v:-positiveConst } что даст ошибку со значением константы
Вот еще норм вариант для си https://stackoverflow.com/a/35261673


>>> cat aa.c
enum { constExpr = 12 * 23 };

int main() {
	char (*__kaboom)[constExpr] = 1;
	void kaboom_print( void ) {
		printf("%d", __kaboom);
	}
	kaboom_print();
	return 0;
}


>>> gcc -Wformat aa.c
...
aa.c:9:12: warning: format '%d' expects argument of type 'int', but argument 2 has type 'char (*)[276]' [-Wformat=]
   printf("%d", __kaboom);                                                                                         
>>> gcc --version
gcc (GCC) 6.3.0  


>>> iccstm8 aa.c 
...
"R:\p\static_print\aa.c",7  Error[Pe144]: a value of type "int" cannot be used 
          to initialize an entity of type "char (*)[276]"                      

bga_ ★★★★
()
Последнее исправление: bga_ (всего исправлений: 3)
Ответ на: комментарий от anonymous

мне макскома позвать?

бабушку лучше позови, ремня тебе всыпать за истерику... :о)

п.с. потом на кухню, там конфетка :о)

sunjob ★★★★
() автор топика
Ответ на: мне макскома позвать? от sunjob

уважаемий владыка всея лора, госпадин @maxcom, выпишите пожалуйста пациенту мут на адин день в связи с недостойным паведением на форуме и грублением людям, каторые иму памагают за бесплатна, а также за то, что портит лицо лора в глазах саобщества. с уважением, анон.

anonymous
()
Ответ на: комментарий от anonymous

блако-вуважаемай, анон... учите русский язык, и... действительно... уважайте сообщество, извольте изъясняться русским слогом на русском ресурсе!

а ваш падонковский сленг оставьте своему уровню и кругу общения!

зы с вашими «концертами» забыл совсем: идея с awk & bc - интересная :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

раз ты любиш стишки, то я написал один. специальна для тибя :)

санджоб. вы думаити нет ашибки
в его названии себя? ашибка есть,
сичас я объясню и станет очевидно
что имя его значит наконец.

ва-первых — сан — это не сонце,
как мог подумать бы иной,
а джоб — и не работа вовсе
и смысл сдлва здесь совсем другой

аткрыв словарик англо-урбаниста 
мы обнаруживаем достоверный факт
о том, что это имя aнaниста,
причём не aнaниста просто так:

он в близкай связи состоит с микравалновкай,
и выбирает ту, каторая пожарче нагреваится,
суёт в неё сваю он вялую головку*,
вот доставерный пруф**, для тех, кто самневается.

* — флассид пени́с, так в периводе на английский.
но может быть, конечно же и так так,
что в имение евонном вовсе нет ошибки,
а это всем давно извесный факт?

** — https://www.urbandictionary.com/define.php?term=sunjob

ну как? а мог бы проста извенится. но ты выбрал второе.

anonymous
()
Ответ на: комментарий от anonymous

браво! это уже, пожалуй шеть! на платиновую медаль идешь! еще немного и ... напрягись... бабушку порадуешь, и дедушку... и родитей гордиться собой заставишь... думаю, и в детсаду на доску почета загремишь! продолжай... у тебя такое будушее... барков еще взвоет из зависти :о)))

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от anonymous

спасиба, но уже, похоже, что поздно.

видишь же сам... это не сложно, писать почти без ошибок... и смысл умудрились передать, и ошибок почти не наделать! бабушка помогала? :о)

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 2)
Ответ на: комментарий от sunjob

браво!

спасиба :) я знал, что тибе пфнравится.

anonymous
()
Ответ на: комментарий от sunjob

ладно, я на тибя не обижаюсь больше. ты адыкватный ;)

извени, если вдруг абидел.

@maxcom, атмена! бан атменяется — я передумал. спасиба.

anonymous
()
Ответ на: комментарий от anonymous

ну точно... бабушка ремня всыпала и обьяснила что конфеты с кухни таскать не хорошо... :о)

зы: спасибо это было не вам :o)))

sunjob ★★★★
() автор топика
Последнее исправление: sunjob (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.