नहीं, स्रोत कोड को फ़ाइल से नहीं आना है (न ही किसी फ़ाइल में जाना है)।
आप एक पाइप के भीतर पूरी तरह से C ++ (और लिंक) को संकलित कर सकते हैं, अपने कंपाइलर को मध्य में रख सकते हैं, जैसे
generate_source | g++ -o- -xc++ - | do_something_with_the_binary
और यह दशकों से ऐसा ही है। यह सभी देखें:
std::source_location
C ++ 20 की शुरूआत इस स्थिति को नहीं बदलती है। यह सिर्फ इतना है कि कुछ कोड में एक अच्छी तरह से परिभाषित स्रोत स्थान नहीं होगा (या यह अच्छी तरह से परिभाषित हो सकता है, लेकिन बहुत सार्थक नहीं है)। वास्तव में, मैं कहूंगा कि std::source_location
फ़ाइलों का उपयोग करने को परिभाषित करने का आग्रह थोड़ा मायोपिक है ... हालांकि निष्पक्षता में, यह सिर्फ एक मैक्रो-कम समकक्ष है __FILE__
और __LINE__
जो पहले से ही सी ++ (और सी) में मौजूद है।
@ HBv6 नोट करता है कि यदि आप __FILE__
मानक इनपुट स्ट्रीम से GCC का उपयोग करते समय संकलन का मूल्य प्रिंट करते हैं :
echo -e '#include <iostream>\n int main(){std::cout << __FILE__ ;}' | g++ -xc++ -
जिसके परिणामस्वरूप निष्पादन योग्य प्रिंट चल रहे हैं <stdin>
।
सोर्स कोड इंटरनेट से भी आ सकता है।
@Morwenn ध्यान दें कि यह कोड:
#include <https://raw.githubusercontent.com/Morwenn/poplar-heap/master/poplar.h>
// Type your code here, or load an example.
void poplar_sort(int* data, size_t size) {
poplar::make_heap(data, data + size);
poplar::sort_heap(data, data + size);
}
GodBolt पर काम करता है (लेकिन आपकी मशीन पर काम नहीं करेगा - कोई भी लोकप्रिय कंपाइलर इसका समर्थन नहीं करता है।)
क्या आप भाषा के वकील हैं? ठीक है, तो चलो मानक से परामर्श करें ।।
यह सवाल कि क्या सी ++ प्रोग्राम स्रोतों को फाइलों से आने की आवश्यकता है, भाषा मानक में स्पष्ट रूप से उत्तर नहीं दिया गया है। C ++ 17 मानक (n4713) के एक मसौदे को देखते हुए, खंड 5.1 [lex.separate] पढ़ता है:
- कार्यक्रम का पाठ इस दस्तावेज़ में स्रोत फ़ाइलों नामक इकाइयों में रखा गया है। सभी हेडर (20.5.1.2) और स्रोत फ़ाइलों में शामिल (19.2) प्रीप्रोसेसिंग निर्देश #include के माध्यम से एक स्रोत फ़ाइल, किसी भी सशर्त समावेशन (19.1) प्रीप्रोसेसिंग निर्देशों में से किसी भी स्रोत लाइनों को छोड़ दिया जाता है, इसे अनुवाद इकाई कहा जाता है।
इसलिए, स्रोत कोड को आवश्यक रूप से प्रति फ़ाइल एक फ़ाइल में नहीं रखा जाता है, लेकिन "यूनिट में एक स्रोत फ़ाइल कहा जाता है"। लेकिन फिर, इसमें शामिल कहाँ से आते हैं? एक मान लेंगे कि वे फाइलसिस्टम पर नामित फाइलों से आते हैं ... लेकिन वह भी अनिवार्य नहीं है।
किसी भी दर पर, std::source_location
C ++ 20 में इस शब्द को बदलना या इसकी व्याख्या (AFAICT) को प्रभावित नहीं करता है।
__FILE__
। क्लास आपकोsource_location
केवल फ़ंक्शन कॉल साइट पर प्राप्त करने की अनुमति देता है।