सी ++, 205 179 बाइट्स
int main(){};static int c=1;
#define v(x) A##x
#define u(x) v(x)
#define z u(__LINE__)
#include <cstdio>
class z{public:z(){++c;};~z(){if(c){printf("%d %o %x",--c,c,c);c=0;}}}z;//
(कोई अनुगामी न्यूलाइन नहीं - जब कॉपी की जाती है, तो कॉपी की पहली पंक्ति और मूल की अंतिम पंक्ति को मेल खाना चाहिए)
मूल रूप से, यह एक स्थिर वैरिएबल का अनुक्रम बनाकर काम करता है, जो निर्माण पर, एक वैश्विक वैरिएबल काउंटर को बढ़ाता है। फिर, विनाश पर, यदि काउंटर 0 नहीं है, तो यह अपने सभी आउटपुट करता है और काउंटर को शून्य पर सेट करता है।
बिना किसी नाम के टकराव के चर के अनुक्रम को परिभाषित करने के लिए, हम इस प्रकार समझाए गए मैक्रो का उपयोग करते हैं:
#define v(x) A##x //This concatenates the string "A" with the input x.
#define u(x) v(x) //This slows down the preprocessor so it expands __LINE__ rather than yielding A__LINE__ as v(__LINE__) would do.
#define z u(__LINE__)//Gives a name which is unique to each line.
जो कुछ हद तक स्ट्रिंग प्रोसेसर के quirks पर निर्भर करता है। हम zकई बार वर्गों / चर को परिभाषित करने के लिए उपयोग करते हैं जो अलग-अलग लाइनों पर कॉपी होने पर एक दूसरे के साथ संघर्ष नहीं करेंगे। इसके अलावा, परिभाषाएँ जो केवल एक बार होती हैं उन्हें पहली पंक्ति में रखा जाता है, जिसे कोड की प्रतियों में टिप्पणी की जाती है। #defineऔर #includeबयान परवाह नहीं है कि वे दोहराया है, इसलिए कोई विशेष हैंडलिंग की जरूरत है।
इस कोड में कथन में अपरिभाषित व्यवहार भी शामिल है:
printf("%d %o %x",--c,c,c)
चूंकि कोई अनुक्रम बिंदु नहीं हैं, लेकिन c को संशोधित और एक्सेस किया गया है। एलएलवीएम 6.0 एक चेतावनी देता है, लेकिन इसे वांछित के रूप में संकलित करता है - जो --cपहले मूल्यांकन करता है c। एक, दो बाइट्स की कीमत पर, बयान जोड़ सकता है --c;आउटपुट और परिवर्तन से पहले --cमें printfकरने के लिए cहै, जो चेतावनी से छुटकारा पाने होगा।
मेरे भाई के एक सुझाव के लिए 26 बाइट्स बचाने के std::coutसाथ प्रतिस्थापित printf।
1 01 0x1करूँ तो ठीक है ? (उपसर्ग शामिल हैं)