Ошибка: вставка сформирована с неверным токеном предварительной обработки - PullRequest
0 голосов
/ 01 мая 2018

У меня следующий код.

#define GOTO_RC(row,col) "\033["#row";"#col"H"
#define DISPLAY_WRITE(row, col, fmt, args) printf(GOTO_RC(row,col)  ## fmt, ## args)

В example.c я пытаюсь использовать его.

DISPLAY_WRITE(24,1,"Command:",12);

Я получаю следующую ошибку в инструменте ARM-MDK [введите описание изображения здесь] [1] [1]: https://i.stack.imgur.com/33MN1.jpg ошибка: вставка сформирована ') "Команда:"', недопустимый токен предварительной обработки [-Winvalid-token-paste] ошибка: вставлено сформированное ', 12', недопустимый токен предварительной обработки [-Winvalid-token-paste]

1 Ответ

0 голосов
/ 01 мая 2018

Поскольку вы просто хотите объединить две строки, избавьтесь от ## в DISPLAY_WRITE. Два строковых литерала рядом друг с другом соединяются автоматически. ## предназначен для объединения двух токенов вместе и последующей их интерпретации как токена, а не строкового литерала.

Кроме того, это не совсем связано, но если вы хотите иметь возможность принимать несколько «аргументов», вам понадобится поддержка вариационных макросов (их поддерживает большинство важных вещей), и выполните что-то вроде этого:

#define DISPLAY_WRITE(row, col, fmt, ...) printf(GOTO_RC(row,col) fmt, __VA_ARGS__)
...