2012-06-22 11 views
7

यह दोषपूर्ण कोडत्रुटि चिपकाने "" हैलो "" और "" WORLD "" नहीं देता है एक वैध preprocessing टोकन

#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: उत्तर की अंतिम वाक्य पढ़ें। यहां एक मैक्रो के लिए वास्तव में कोई ज़रूरत नहीं है; संकलक पहले से ही आपके लिए concatenation करता है। – cHao

+1

अगर मैं एक मैक्रो नहीं चाहता हूं तो मैं पूछूंगा, मेरा सवाल यह है कि मैक्रो = के साथ इसे कैसे करें)। शायद यह संभव नहीं है – trucos

संबंधित मुद्दे