Как подставить буквенную часть к названию переменной?
Как подставить буквенную часть к названию переменной? Есть строчка fprintf(logfile," ");, как подставить к logfile еще буквенную часть? Примерно вида logfile_{}, где {} это буквенная часть?
Ответы (1 шт):
Добро пожаловать в чудесный мир препроцессора С и его возможностей кодогенерации. Общий пример, что можно сделать:
#include <stdio.h>
#define FUNC(NAME, NUMBER) NAME ##_## NUMBER
void print_hello(void)
{
puts("Hello world!");
}
int main(void)
{
FUNC(print, hello)();
return 0;
}
Обьяснение, что за черная магия. Препроцессор - очень мощная штука, с помощью него можно делать буквально что угодно (хоть писать плюсовые шаблоны. Больно, но можно). В данном случае используется банальная конкатенация строк - вместо ## подставляются значения "аргументов", которые были переданы. То есть, в вашем случае, это будет выглядеть примерно так:
// Some code...
#define VAR(NAME, NUMBER) NAME ##_## NUMBER
// Some code...
fprintf(VAR(logfile, 1),"");
Такая конструкция после препроцессинга будет восприниматься компилятором как fprintf(logfile_1,"");. Только остается проблема - в рантайме (то есть во время выполнения программы) так сделать не получится. Только на этапе препроцессинга. В вашем вопросе не очень понятно, в какой момент вы собираетесь менять название переменной, но если не в момент выполнения - данное решение может вам помочь