Макрос препроцессора C для возврата строки, повторяющейся определенное количество раз

Знает ли кто-нибудь о магии препроцессора C99, позволяющей создать строку, состоящую из другой строки, повторяющейся N раз?

Например.

STRREP( "%s ", 3 )

становится

"%s %s %s "

после предварительной обработки.

Единственное, что я мог придумать о себе, это что-то вроде этого

#define STRREP( str, N ) STRREP_##N( str )    
#define STRREP_0(str) ""
#define STRREP_1(str) str
#define STRREP_2(str) str str
#define STRREP_3(str) str str str
...

, которое работает хорошо, но некрасиво, поскольку мне приходится определять макрос для каждой длины повторения вручную. Я хочу использовать его вместе с макросами с переменным числом аргументов и макросом, возвращающим количество аргументов макроса, показанных здесь .

13
задан Community 23 May 2017 в 12:17
поделиться