Как вычислить и показать значение #define macro VStudio - PullRequest
0 голосов
/ 25 августа 2018

Я знаю, как показать расширенный макрос в C. Однако меня интересует, как отобразить вычисленное значение макроса.

Прекомпилятор определенно вычисляет значения макросов для выполнения оператора #if (a> b):

#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#define ONE_BYTE_Tx_Time 11
#define NUM_OF_BYTES     16
#define BUSY_TIME        132
#define TOTAL_TIME       300
#define AVAIL_TIME       (TOTAL_TIME-BUSY_TIME)
#define RESP_TIME        (ONE_BYTE_Tx_Time * NUM_OF_BYTES)

#pragma message ("AVAIL_TIME =" STRINGIFY(AVAIL_TIME))
#pragma message ("RESP_TIME =" STRINGIFY(RESP_TIME))

#if (AVAIL_TIME <= RESP_TIME)
  #error "not enough time"
#endif

Вывод во время компиляции:

    AVAIL_TIME =(300-132)
    RESP_TIME =(11 * 16)
    fatal error C1189: #error :  "not enough time"

Итак, прекомпилятор вычислил два целых числа, сравнил их и выдал ошибку.

Мой вопрос: как показать фактический РЕЗУЛЬТАТ вычисления макроса во время компиляции ?, т.е.

   AVAIL_TIME = 168 // which is (300-132)
   RESP_TIME = 176  // which is (11 * 16)

Расширение формул может быть довольно сложным, поэтому полезно видеть результат во время компиляции без выполнения кода:

   AVAIL_TIME_in_SysTicks =(((75000000/1000000) * (1000000/2500)) - 2 * ((((75000000/1000000) * ((1000000000/900000) + 1)*(10 + 0x00000000/0x00000008) + 2)/1000) * 16)) 

Спасибо, Игорь

...