2009-07-03 22 views
12

क्या सी ++ प्री-प्रोसेसर को स्ट्रिंग अक्षर में # परिभाषित मान का विस्तार करने का कोई तरीका है?
उदाहरण के लिए:क्या आप # परिभाषित स्ट्रिंग अक्षर में परिभाषित कर सकते हैं?

#define NEW_LINE '\n' 
Printf("OutputNEW_LINE"); //or whatever 

यह है कि यह संभव हो जाना चाहिए मेरे लिए लग रहा है के रूप में यह संकलन से पहले है?
या इस तरह के व्यवहार को प्राप्त करने के लिए एक बेहतर डिजाइन पैटर्न है (बिना रनटाइम फिक्स जैसे स्प्रिंटफ का उपयोग किए बिना)?

संपादित मैं समझता हूँ कि # को परिभाषित है कि की बुराई हो सकता है, लेकिन तर्क खातिर ...

अतिरिक्त किसी को भी इस दृष्टिकोण के किसी भी आलोचना है?

+0

@GMan कोई 'कम बदसूरत' विकल्प? –

+5

ठीक है, आप सीधे स्ट्रिंग्स में \ n का उपयोग कर सकते हैं। सी मानक अनिवार्य है कि कम से कम जब पाठ फ़ाइलों और कंसोल को लिखते समय प्लेटफॉर्म डेलीमीटर/टर्मिनेटर के रूप में प्लेटफॉर्म का उपयोग करने के लिए यह एकल वर्ण विस्तारित किया जाएगा। – Joey

उत्तर

25

है यह यह करना होगा:

#define NEW_LINE "\n"   // Note double quotes 
Printf("Output" NEW_LINE); 

(तकनीकी तौर पर इसे संकलक पूर्वप्रक्रमक से तार में शामिल होने के बजाय है, लेकिन अंतिम परिणाम एक ही है।)

6

अगर मैं सही ढंग से याद यह

Printf("Output" NEW_LINE); 
+0

तो इसे प्रिंट समय पर प्रिंटफ की फॉर्मेटिंग सुविधा के माध्यम से विस्तारित नहीं किया जाएगा? –

+3

हां, सी कंपाइलर स्वचालित रूप से आसन्न स्ट्रिंग अक्षरों को जोड़ देगा, हालांकि #define को NEW_LINE को "\ n" के रूप में परिभाषित करना चाहिए और '\ n' काम करने के लिए नहीं, मुझे लगता है। – Joey

+0

डाउनवोट क्यों, अपरकेस printf के कारण? – Kosi2801

2

आप निम्न कार्य कर सकते हैं।

#define NEW_LINE "\n" 
printf("Output" NEW_LINE); 
-1

खैर ....

printf("Output%s", NEW_LINE); 
+0

यह एक रनटाइम होगा –

+0

ठीक करें, लेकिन लंबी अवधि में बनाए रखने के लिए बहुत आसान :) –

+0

mmmm ... वास्तव में, यदि आपको # परिभाषित परिवर्तन और लापता कॉमा को कुछ भी परेशानी का कोई कारण नहीं होना चाहिए, तो कुछ भी फिर से संकलित करना होगा यदि कुछ में पाठ परिवर्तन, क्योंकि आप अभी भी कुछ तोड़ने के बिना प्लेसहोल्डर और चर जोड़ सकते हैं। कम से कम मेरे विचार में। – Kosi2801

1
#define NEW_LINE "\n" 
printf("Output" NEW_LINE); //or whatever 

चाल करना चाहिए।

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

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