1

我有以下代码。

#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 错误:粘贴形成的 ')"Command:"',无效的预处理令牌 [-Winvalid-token-paste] 错误:粘贴形成的 ',12',无效的预处理令牌 [-Winvalid-token-paste]

4

1 回答 1

1

由于您只想连接两个字符串,因此请去掉##in DISPLAY_WRITE。彼此相邻的两个字符串文字会自动连接。##用于将两个标记连接在一起,然后将它们再次解释为标记,而不是字符串文字。

此外,不完全相关,但如果您希望能够采用多个“args”,您将需要对可变参数宏的支持(大多数相关的东西都支持它们),并执行以下操作:

#define DISPLAY_WRITE(row, col, fmt, ...) printf(GOTO_RC(row,col) fmt, __VA_ARGS__)
于 2018-05-01T09:22:29.020 回答