Есть функции: bool R1() .... R55(); Хочу вызвать их с помощью макроса:
#define rasch(name) R##name()
....
rasch(i);
.....
Если вместо i подставить число (rasch(23)), то все получается. А если использовать переменную, то прога пытается вызвать функцию Ri(), что и логично. Вопрос вот в чем, как можно вызвать функцию макросом, с помощью переменной i ?
Макрос - это простая текстовая замена, естественно, что она заменяет текст i, а не значение переменной. Препроцессор не имеет представления даже о синтаксисе языка, а уж о том, что находится в переменной во время выполнения - не знает даже компилятор...
Проще всего - создайте массив указателей на функции примерно как
typedef viod (*func)();
func f[55] = { R1, R2, ..., R55 };
Ну и
void rasch(int i)
{
f[i-1]();
}
Никак. Сделай массив указателей на функции и вызывай по индексу.
https://ideone.com/QLgqQ1
#include <iostream>
using namespace std;
void f1() { cout << "f1" << endl; }
void f2() { cout << "f2" << endl; }
void (*fs[])() = { f1, f2 };
int main()
{
for (int q=0; q<2; ++q)
fs[q]();
return 0;
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости