c++ - india - model code of conduct pdf




C/C++, क्या आप किसी फ़ाइल को एक स्ट्रिंग शाब्दिक में जोड़ सकते हैं? (5)

C / C ++ प्रीप्रोसेसर टोकन की इकाइयों में कार्य करता है, और एक स्ट्रिंग शाब्दिक एकल टोकन है। जैसे, आप एक स्ट्रिंग शाब्दिक के बीच में हस्तक्षेप नहीं कर सकते जैसे कि।

आप स्क्रिप्ट स्क्रिप्ट को प्रीप्रोसेस कर सकते हैं जैसे:

"some code\n"
"some more code that will be appended\n"

और, हालांकि, यह बताएं। या आप xxd ​ -i का उपयोग शामिल करने के लिए तैयार सी स्थैतिक सरणी उत्पन्न करने के लिए कर सकते हैं।

इस सवाल का पहले से ही यहाँ एक जवाब है:

मेरे पास C ++ स्रोत फ़ाइल और पायथन स्रोत फ़ाइल है। मैं चाहूंगा कि C ++ स्रोत फ़ाइल पायथन स्रोत फ़ाइल की सामग्री को एक बड़े स्ट्रिंग शाब्दिक के रूप में उपयोग करने में सक्षम हो। मैं ऐसा कुछ कर सकता था:

char* python_code = "
#include "script.py"
"

लेकिन यह काम नहीं करेगा क्योंकि प्रत्येक पंक्ति के अंत में होना चाहिए। मैं पायथन कोड की सामग्री को मैन्युअल रूप से कॉपी और पेस्ट कर सकता हूं और प्रत्येक पंक्ति को उद्धरण और एक समाप्ति \ n के साथ घेर सकता हूं, लेकिन यह बदसूरत है। हालांकि अजगर स्रोत प्रभावी रूप से मेरे C ++ ऐप में संकलित होने जा रहा है, मैं इसे एक अलग फ़ाइल में रखना चाहूंगा क्योंकि यह अधिक व्यवस्थित है और संपादकों के साथ बेहतर काम करता है (emacs यह समझने में स्मार्ट नहीं है कि सी स्ट्रिंग शाब्दिक है अजगर कोड है और जब आप इसके अंदर होते हैं तो अजगर मोड पर स्विच करें)।

कृपया सुझाव न दें कि मैं PyRun_File का उपयोग करता हूं, यही मैं पहली जगह से बचने की कोशिश कर रहा हूं;)


आप Cog उपयोग अपनी निर्माण प्रक्रिया (प्रीप्रोसेसिंग करने और कोड को एम्बेड करने के लिए) के भाग के रूप में कर सकते हैं। मैं स्वीकार करता हूं कि इसका परिणाम शायद आदर्श नहीं है, तब से आप दोनों स्थानों में कोड देखकर समाप्त हो जाते हैं। लेकिन किसी भी समय मैं "पायथन," "सी ++", और "प्रीप्रोसेसर" को निकटता में देखता हूं, मुझे लगता है कि यह एक उल्लेख के योग्य है।


ऐसा कुछ करने का सबसे अच्छा तरीका है कि फाइल को एक संसाधन के रूप में शामिल किया जाए यदि आपके पर्यावरण / टूलसेट में वह क्षमता है।

यदि नहीं (जैसे एम्बेडेड सिस्टम, आदि), आप एक बिन 2 सी उपयोगिता ( http://stud3.tuwien.ac.at/~e0025274/bin2c/bin2c.c कुछ का उपयोग कर सकते हैं)। यह एक फ़ाइल का बाइनरी प्रतिनिधित्व लेगा और सी स्रोत फ़ाइल को थूक देगा जिसमें उस डेटा के लिए बाइट्स का एक सरणी शामिल है। यदि आप सरणी को '0' समाप्त करना चाहते हैं, तो आपको टूल या आउटपुट फ़ाइल की कुछ ट्विकिंग करने की आवश्यकता हो सकती है।

अपने मेकफाइल (या जो भी आप अपने बिल्ड को चलाने के लिए उपयोग कर रहे हैं, उसके पूर्व-निर्मित चरण के रूप में) बिन 2 सी उपयोगिता को शामिल करें। फिर बस फ़ाइल को आपके एप्लिकेशन के साथ संकलित और लिंक किया गया है और आपके पास आपकी स्ट्रिंग (या फ़ाइल की जो भी अन्य छवि) है वह सरणी द्वारा प्रतिनिधित्व की गई मेमोरी के एक हिस्से में बैठी है।

यदि आप एक पाठ फ़ाइल को स्ट्रिंग के रूप में शामिल कर रहे हैं, तो एक बात जो आपको पता होनी चाहिए कि यह है कि लाइन एंडिंग मेल नहीं खा सकता है कि फ़ंक्शन क्या अपेक्षा करते हैं - यह एक और चीज हो सकती है जिसे आप बिन 2 सी उपयोगिता में जोड़ना चाहते हैं या आप चाहते हैं यह सुनिश्चित करने के लिए कि आपका कोड फ़ाइल में जो भी लाइन एंडिंग ठीक से है, उसे हैंडल करे। हो सकता है कि बिन 2 सी उपयोगिता को संशोधित करने के लिए एक 'एस' स्विच हो, जो इंगित करता है कि आप एक स्ट्रिंग के रूप में एक टेक्स्ट फाइल को असम्बद्ध करना चाहते हैं ताकि लाइन एंडिंग सामान्यीकृत हो जाए और सरणी के अंत में एक शून्य बाइट होगी।


यह आपको पूरे रास्ते नहीं मिलेगा, लेकिन यह आपको बहुत ही करीब लाएगा।

मान लें कि script.py में यह शामिल है:

print "The current CPU time in seconds is: ", time.clock()

सबसे पहले, इसे इस तरह लपेटें:

STRINGIFY(print "The current CPU time in seconds is: ", time.clock())

फिर, इससे पहले कि आप इसे शामिल करें, ऐसा करें:

#define STRINGIFY(x) #x

const char * script_py =
#include "script.py"
;

शायद उससे भी ज्यादा सख्त जवाब है, लेकिन मैं अभी भी खोज कर रहा हूं।


getline , getline , और getline उपयोग करें।





string-literals