Вы не можете легко сделать это с помощью макроса.
Проблема в том, что макрос - это конструкция времени компиляции, а у вас есть цикл времени исполнения; Вы не можете сделать это напрямую.
Вы можете исследовать Boost Preprocessor (который не предназначен специально для C ++; он также работает с препроцессором C) и использовать его для написания макросов, которые генерируют цикл.
Вы можете вручную развернуть цикл и использовать макрос с постоянным аргументом:
#define SATA_PORT(i) "/sata-ahci/port" #i
printf("%s\n", 0, SATA_PORT(0));
printf("%s\n", 1, SATA_PORT(1));
printf("%s\n", 2, SATA_PORT(2));
printf("%s\n", 3, SATA_PORT(3));
printf("%s\n", 4, SATA_PORT(4));
printf("%s\n", 5, SATA_PORT(5));
Или вы можете использовать массив строк (также предложенный удаленным ответом).
#define DIM(x) (sizeof(x)/sizeof(*(x)))
const char * const sata_ports[] =
{
"/sata-ahci/port0",
"/sata-ahci/port1",
"/sata-ahci/port2",
"/sata-ahci/port3",
"/sata-ahci/port4",
"/sata-ahci/port5"
};
for (int i = 0; i < DIM(sata_ports); i++)
printf("%d %s\n", i, sata_ports[i]);