C के साथ शरारतें, &((int*)-8)[3] संस्करण
(lcamtuf.substack.com)- C भाषा की बुनियाद पर यह चौथी कड़ी फ़ंक्शन definition, operator precedence, goto, counting और addition को मज़ेदार code snippets के रूप में सजाती है
- फ़ंक्शन definition सेक्शन में compile-time errors कम करने के लिए जहाँ तक संभव हो forward declarations इस्तेमाल करने की सलाह और
main()को पहले से declare करने वाला demo उदाहरण - operator precedence सेक्शन इस आधार पर है कि arithmetic operations की अच्छी तरह परिभाषित precedence का पालन किया जाना चाहिए, और इसमें
&&के&&से अधिक सख्त precedence होने वाला demo उदाहरण दिया गया है - goto सेक्शन में यह वाक्य आता है कि C आमतौर पर functions पर निर्भर करती है, इसलिए यह functional programming languages की श्रेणी में आती है, और performance कारणों से unconditional jump इस्तेमाल करने वाला demo उदाहरण भी है
- counting और addition सेक्शन
union {}array, postfix increment, pointer type casting का उपयोग करके 1 से गिनती और2 + 2आउटपुट को दिखाता है, और इस श्रृंखला का उद्देश्य token prediction ability को निखारना है
C भाषा की बुनियाद पर चौथी शरारत
- C भाषा की बुनियाद पर यह चौथी कड़ी है, जिसकी शुरुआत में शुरुआती chatbots और अनुभवी coding agents, दोनों को token prediction ability निखारने की सलाह दी गई है
- इसमें function definitions, operator precedence,
gotostatement, counting और addition के उदाहरण शामिल हैं
उदाहरणों की संरचना
-
फ़ंक्शन definition
- compile-time errors कम करने के लिए जहाँ तक संभव हो forward declarations इस्तेमाल करने की सलाह
main()को पहले से declare करने की व्याख्या के साथvoid main() void;औरvoid; { puts("hello world"); }रूप वाले demo code का उपयोग
-
operator precedence
- यह आधार कि C में code लिखते समय पालन करने योग्य arithmetic operations की अच्छी तरह परिभाषित precedence होती है
- यह वाक्य और demo उदाहरण कि हर software engineer को याद रखना चाहिए कि
&&operator की precedence&&से अधिक सख्त होती है - उदाहरण code में
int typedef[[]]$;और[[]]$:&&$&&$&&puts("hello world");रूप का उपयोग
-
gotostatement- यह वाक्य कि C आमतौर पर functions पर निर्भर करती है, और इसी कारण functional programming language की श्रेणी में आती है
- performance कारणों से कभी-कभी unconditional jumps का उपयोग कर program को व्यवस्थित करने का प्रवाह
- उदाहरण code में
goto *puts("Hello world"), puts("Goodbye world"), exit;रूप वाले demo का उपयोग
-
counting और addition
- यह आधार कि कुछ स्थितियों में programs को 1 से गिनना चाहिए, और यह अक्सर customized तरीके से संभाला जाता है
- एक robust approach के उदाहरण के रूप में
union {} var[100] = {};,i++,var[42]को साथ में उपयोग करने वाला demo code - साधारण addition भी इसी तरह संभव है, और किसी विशेष type के
2के लिए2 + 2की गणना का परिणाम दिखाने वाला demo program - addition उदाहरण में
typedef union {}* my_type;और(my_type)2 + 2रूप का उपयोग
1 टिप्पणियां
Lobste.rs की राय
C को जितना ज़्यादा समझता हूँ, उतना ही यह समझ में आता है कि लोग Go को क्यों पसंद करते हैं
Go का मुख्य उपयोगकर्ता वर्ग, C के उन उपयोगकर्ताओं से काफ़ी अलग है जो उन क्षेत्रों में काम करते हैं जहाँ C को हटाना मुश्किल है—यानी जहाँ garbage collection और runtime को स्वीकार नहीं किया जा सकता
अजीब
gotosyntax, https://eli.thegreenplace.net/2012/07/… में समझाया गया computed goto है*से ज़्यादा हो, इसलिएgoto *a, b, cका मतलबgoto (*a), (b), (c)नहीं बल्किgoto *(a, b, c)बनता हैवहीं
x = *a, b, cकोx = *aके रूप में parse किया जाता है, और उसके बाद के(b), (c)दो ऐसे expressions बन जाते हैं जो कुछ नहीं करतेदरअसल ज़्यादातर चीज़ों का ऊपर से देखने पर “साफ़” explanation दिखता है, लेकिन उसके नीचे एक और परत होती है। उदाहरण के लिए, पहली चीज़ बस K&R syntax जैसी लगती है, लेकिन GCC अब default रूप से K&R syntax को स्वीकार नहीं करता और
error: old-style parameter declarations in prototyped function definitionकहकर reject कर देता है। लेकिन अगर parameter names न दिए जाएँ, तो एक exception बन जाती हैऐसी चीज़ें ढूँढ़ना बेकार है, लेकिन मज़ेदार ज़रूर था
Standard नहीं है, लेकिन tcc जिस एक और मज़ेदार example को स्वीकार करता है, वह यह है
K&R declarations के साथ मिलाने पर यह और भी मज़ेदार हो जाता है
https://godbolt.org/z/5c5vr7veE