Перейти к содержанию
    

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Так

#define TEST (1000000000000ULL / 1000000001)

предопределеннее некуда, а SSerge говорит, что не считает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так

#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          }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...