miheyk 0 28 августа, 2015 Опубликовано 28 августа, 2015 · Жалоба Препроцессор может считать только предопределенные значения, т.к. выполняется он до прохода компилятором, и понятия не имеет, какие входные данные ему могут быть поданы. Посему применять препроцессор есть смысл для регулярных выражений, либо для явного наименования численного значения для упрощения восприятия кода, уменьшения ошибок и облегчения сопровождения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 28 августа, 2015 Опубликовано 28 августа, 2015 · Жалоба Препроцессор может считать только предопределенные значения, т.к. выполняется он до прохода компилятором, и понятия не имеет, какие входные данные ему могут быть поданы. Так #define TEST (1000000000000ULL / 1000000001) предопределеннее некуда, а SSerge говорит, что не считает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 28 августа, 2015 Опубликовано 28 августа, 2015 · Жалоба Так #define TEST (1000000000000ULL / 1000000001) предопределеннее некуда, а SSerge говорит, что не считает. А зачем ему что-то считать в данном случае? Рассматривайте препроцессор как специализированный текстовый редактор, который работает непосредственно перед компилятором. Это его основное предназначение, т.е. препроцессор получает на входе текст программы, делает в ней текстовые подстановки и выдаёт на выходе тоже текст, с которым потом разбирается уже компилятор. Ничего считать при этом препроцессору не нужно, просто один фрагмент текста заменяется на другой. Для проверки включите выдачу результата работы препроцессора в файл, да и посмотрите что там будет. Кейла у меня нет, могу на примере IAR-а продемонстрировать что препроцессор делает только подстановку, а вычисляет выражение уже компилятор: //файл main.cpp void foo() { #define TEST (1000000000000ULL / 1000000001) SysTick_Config( TEST ); } //файл main.i - выход препроцессора void foo() { SysTick_Config( (1000000000000ULL / 1000000001) ); } //файл main.lst 76 void foo() 77 { 78 #define TEST (1000000000000ULL / 1000000001) 79 SysTick_Config( TEST ); \ _Z3foov: (+1) \ 00000000 0xF240 0x30E7 MOVW R0,#+999 \ 00000004 0x.... B.N _Z14SysTick_Configj 80 } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться