Подтвердить что ты не робот

Можете ли вы расширить #define в строковые литералы?

Есть ли способ заставить предварительный процессор С++ расширить значение # define'ed в строковый литерал?
например:

#define NEW_LINE '\n'
Printf("OutputNEW_LINE"); //or whatever

Это выглядит так, как это должно быть возможно, как это было до компиляции?
Или есть лучшая модель дизайна для достижения такого поведения (не прибегая к исправлениям времени выполнения, например sprintf)?

EDIT Я понимаю, что #define может быть злым, но ради аргументов...

ДОПОЛНИТЕЛЬНО Кто-нибудь критикует этот подход?

4b9b3361

Ответ 1

Это будет сделано:

#define NEW_LINE "\n"         // Note double quotes
Printf("Output" NEW_LINE);

(Технически это компилятор, соединяющий строки, а не препроцессор, но конечный результат тот же.)

Ответ 2

Если я правильно помню, это

Printf("Output" NEW_LINE);

Ответ 3

Вы можете сделать следующее.

#define NEW_LINE "\n"
printf("Output" NEW_LINE);

Ответ 4

#define NEW_LINE "\n"
printf("Output" NEW_LINE); //or whatever

должен сделать трюк.

Ответ 5

Ну....

printf("Output%s", NEW_LINE);