Есть функции: 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;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
У меня не получается скомпилировать драйвер правильно на Visual StudioА как скомпилировать просто без Visual Studio? В принципе я нашел на хабрахабр...
Добрый день, подскажите, пожалуйста, как правильно написать конфиг для clang-format, чтобы перенос длинных строк осуществлялся вместе с запятой,...
Нужно заинжектиться в explorerexe, имею dll который имеет такой код: