Использование имени символа в качестве строкового литерала в макросе функции #define - PullRequest
3 голосов
/ 25 марта 2012

Я хочу макрос-функцию отладки, который работает следующим образом:

int myVar = 5;
PRINTVAR(myVar); // macro

// which expands to something like...
print("myVar: ");
println(myVar);

По сути, я хочу использовать идентификатор как строковый литерал, а также как переменную.

Мне просто надоело повторяться, когда я хочу выгрузить много переменных в стандартный вывод.

Моя глупая попытка, которая, конечно, не работает:

#define PRINT_VAR(x) Serial.print("x: "); Serial.println(x);

Возможно ли это?

Ответы [ 3 ]

10 голосов
/ 25 марта 2012

«Струнный оператор» предназначен именно для этого случая:

#define PRINT_VAR(x) (print(#x ": "), println(x))
2 голосов
/ 25 марта 2012

Посмотрите строковый оператор , #, когда вы используете идентификатор макроса с префиксом этого, он помещает его как строку вместо расширения.

0 голосов
/ 25 марта 2012

Приведя пример кода, я не знаю, говорите ли вы о C или Java.Тем не менее, вот я сделаю в C:

#define DEBUG(X, ...) fprintf(x, __VA_ARGS__);

И использовать его:

DEBUG (srderr, "моя ошибка \ n");

...