Функции препроцессора, оцениваемые во время компиляции в C

Я хочу написать функции / массивы препроцессора, которые оцениваются в время компиляции. Например, если я определяю

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

Очевидно, мы должны использовать литерал в качестве аргумента. Возможно ли это?

6
задан Brian Tompsett - 汤莱恩 29 February 2016 в 19:35
поделиться