2012-06-22 32 views
7

這是錯誤的代碼錯誤粘貼「」 HELLO「」和「」世界「」沒有給出一個有效的預處理標記

#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")); 
} 

爲什麼它給出了錯誤?我怎麼修復它?

編輯

這就是我要做的

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

#define XML  CAT(CAT(PRE,"XML SOMETHING"),POS) 

然後

printf(XML); 

回答

8

##的結果必須是一個令牌,並且"HELLO""WORLD"是不是一個單一的令牌。來連接字符串,只是讓他們在彼此的旁邊:

printf("HELLO" "WORLD"); 

或更改您的宏刪除##

#define CAT(A, B) A B 

當它們之間沒有介入令牌時,字符串文字串聯在一起。

+0

你是指什麼「一個令牌」?我如何與預處理器進行連接? – trucos

+1

@trucos:閱讀答案的最後一句。在這裏真的不需要一個宏;編譯器已經爲你連接了。 – cHao

+1

如果我不想要一個宏,我不會問,我的問題是如何使用宏=)。也許這是不可能的 – trucos

相關問題