错误:使用无效的预处理令牌形成粘贴

时间:2018-05-01 09:20:21

标签: c arm concatenation pasting

我有以下代码。

#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 :(得分:1)

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

此外,并不完全相关,但如果你想能够采取多个“args”,你将需要支持可变参数宏(最相关的东西支持它们),并做这样的事情:

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