Поскольку вы просто хотите объединить две строки, избавьтесь от ##
в DISPLAY_WRITE
. Два строковых литерала рядом друг с другом соединяются автоматически. ##
предназначен для объединения двух токенов вместе и последующей их интерпретации как токена, а не строкового литерала.
Кроме того, это не совсем связано, но если вы хотите иметь возможность принимать несколько «аргументов», вам понадобится поддержка вариационных макросов (их поддерживает большинство важных вещей), и выполните что-то вроде этого:
#define DISPLAY_WRITE(row, col, fmt, ...) printf(GOTO_RC(row,col) fmt, __VA_ARGS__)