Я хочу написать функции / массивы препроцессора, которые оцениваются в время компиляции. Например, если я определяю
#define MYARR[] {5,4,3,2,1,0}
, то код
int x = R[0];
должен быть представлен компилятору как
int x = 5;
. (Конечно, в индексе можно использовать только литералы).
Это важно, если размер кода / память важны, и мы не хотим
store MYARR
, но он нам нужен для удобства кодирования.
Функции времени компиляции тоже подойдут. Например, что-то вроде
#define MYMAP(n)
#if n==1
5
#else
2
Итак, оператор
int x = MYMAP(4);
должен быть представлен компилятору как
int x = 2;
Очевидно, мы должны использовать литерал в качестве аргумента. Возможно ли это?