Есть ли способ, чтобы компилятор C (XC16 в моем случае, который основан на gcc) дампировал результаты выражения времени компиляции?
У нас есть много #define, таких как
#define FOO 37.6
#define FOO_BASE 0.035
#define FOO_FIXEDPOINT (int16_t)(FOO/FOO_BASE)
и я хотел бы знать фактические числа, которые компилятор уменьшает эти выражения до.
Обратите внимание, что это НЕ то же самое, что вы хотите знать, что выводит препроцессор; препроцессор не вычисляет математику, она только заменяет вещи. Если я посмотрю на вывод препроцессора, я получаю (эффективно)
#define FOO_FIXEDPOINT (int16_t)(37.6/0.035)
и это компилятор, а не препроцессор, который вычисляет значение.
Еще один важный момент: у меня есть свобода создавать специальный файл .c, который делает такие вещи, как
#include "foo.h"
const int16_t foo_fixedpoint = FOO_FIXEDPOINT;
чтобы я предоставлял место компилятору для выполнения его работы и ставил результаты как константу.
Как полный самодостаточный пример, если я поместил его в foo.c и запустил xc16-gcc.exe -E foo.c
:
#include <stdint.h>
#define FOO 37.6
#define FOO_BASE 0.035
#define FOO_FIXEDPOINT (int16_t)(FOO/FOO_BASE)
int main()
{
int x = FOO_FIXEDPOINT;
}
Я получаю этот вывод:
[... typedefs elided ...]
int main()
{
int x = (int16_t)(37.6/0.035);
}