粘贴""HELLO""和""WORLD""错误不会提供有效的预处理令牌

tru*_*cos 7 c c-preprocessor

这是错误的代码

#include<stdio.h>

#define CAT_I(A, B)         A ## B
#define CAT(A, B)           CAT_I(A,B)

void main (void)
{
        printf(CAT("HELLO","WORLD"));
}
Run Code Online (Sandbox Code Playgroud)

为什么会出错?我该怎么办呢?

编辑

这就是我想要做的

#define TAG                   "TAG"
#define PRE                   CAT(CAT("<",TAG),">")  
#define POS                   CAT(CAT("</",TAG),">") 

#define XML      CAT(CAT(PRE,"XML SOMETHING"),POS)   
Run Code Online (Sandbox Code Playgroud)

然后

printf(XML); 
Run Code Online (Sandbox Code Playgroud)

Set*_*gie 8

结果##必须是单个令牌,并且"HELLO""WORLD"不是单个令牌.要连接字符串,只需将它们放在一起:

printf("HELLO" "WORLD");
Run Code Online (Sandbox Code Playgroud)

或者更改宏以删除##.

#define CAT(A, B) A B
Run Code Online (Sandbox Code Playgroud)

当字符串文字之间没有中间标记时,它们会连接在一起.

  • 然后在答案中的最后一个*之前阅读句子*.:)如果您只是连接字符串文字,则不需要`##`. (3认同)
  • @trucos也许如果你让我们知道你实际上想要做什么,那么我们可以帮助你更好. (3认同)