@KiVa

Как сформировать строку посредством макросов языка Си?

Доброго дня!
В чужом заголовочном файле есть:
#define number 10
У себя надо получить:
#define stamp "stamp n.10"  // где 10 берётся выше, в строке пробел обязателен

Очевидно, что решение в лоб не работает:
#define mkstr(s) # s
#define concat(a,b) a ## b
#define stamp mkstr(concat(stamp n., number))

Проблема в mkstr(), который раскрывается до concat(). Знаю, что здесь надо использовать "магию" с промежуточным макросом, но не могу сообразить как реализовать.
Просьба помочь с корректным решением по формированию указанной строки средствами макросов языка Си.
  • Вопрос задан
  • 303 просмотра
Пригласить эксперта
Ответы на вопрос 1
sfi0zy
@sfi0zy
Creative frontend developer
Знаю, что здесь надо использовать "магию" с промежуточным макросом, но не могу сообразить как реализовать.

Если я ничего не путаю, то должно получиться что-то такое:
#define number 10

#define mkstr2(s) #s
#define mkstr(s) mkstr2(s)
#define stamp "stamp n." mkstr(number)

#include <stdio.h>

int main()
{
    printf("%s", stamp); // stamp n.10
    return 0;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы