Как мне добиться этого без использования оператора if или switch?
Вы можете поместить все 1000 констант в массив , а затем использовать arg
, чтобы выбрать нужную.
int list[1000] = {NUM1, NUM2, NUM3, NUM4...NUM1000};
void func(int arg){
var = list[arg - 1]; // use arg-1 because C arrays start from zero
}
Как сформировать #define имя константы в C?
Вы не можете, и если бы могли, это не помогло бы вам. Макросы, созданные с помощью #define, обрабатываются препроцессором. То есть, прежде чем ваш код будет отправлен самому компилятору, препроцессор просматривает его и заменяет каждое имя макроса (например, NUM1
) на соответствующее значение (например, 123
). Полученный код затем передается компилятору, поэтому компилятор даже не видит имена макросов. Таким образом, даже если вы могли бы каким-то образом динамически создавать имя макроса во время выполнения, не было бы способа соединить это имя обратно со значением, которое было связано с ним в исходном коде.