लैम्ब्डा का प्रयोग करें (अप्राप्य)
के बजाय
f(int*a,int*b){return*a>*b?1:-1;}
...
qsort(a,b,4,f);
या (केवल जीसीसी)
qsort(a,b,4,({int L(int*a,int*b){a=*a>*b?1:-1;}L;}));
या (ब्लॉक समर्थन के साथ llvm)
qsort_b(a,b,4,^(const void*a,const void*b){return*(int*)a>*(int*)b?1:-1;});
कुछ ऐसा प्रयास करें
qsort(a,b,4,"\x8b\7+\6\xc3");
... जहां उद्धृत स्ट्रिंग में आपके "लैम्ब्डा" फ़ंक्शन की मशीन भाषा निर्देश (सभी प्लेटफॉर्म एबीआई आवश्यकताओं के अनुरूप) शामिल हैं।
यह ऐसे वातावरण में काम करता है जिसमें स्ट्रिंग स्थिरांक को निष्पादन योग्य चिह्नित किया जाता है। डिफ़ॉल्ट रूप से यह लिनक्स और ओएसएक्स में सही है लेकिन विंडोज में नहीं।
मूर्खतापूर्ण तरीके से अपने स्वयं के "लंबो" कार्यों को लिखने के लिए सी में फ़ंक्शन लिखना है, इसे संकलित करें, इसे कुछ इस तरह से निरीक्षण करें objdump -D
और संबंधित हेक्स कोड को एक स्ट्रिंग में कॉपी करें। उदाहरण के लिए,
int f(int*a, int*b){return *a-*b;}
... जब gcc -Os -c
लिनक्स x86_64 लक्ष्य के लिए संकलित किया जाता है तो कुछ ऐसा उत्पन्न होता है
0: 8b 07 mov (%rdi),%eax
2: 2b 06 sub (%rsi),%eax
4: c3 retq
जीएनयू के सी.सी. goto
:
आप इन "लंबो कार्यों" को सीधे कॉल कर सकते हैं लेकिन यदि आप जिस कोड को कॉल कर रहे हैं वह पैरामीटर नहीं लेता है और वापस नहीं जा रहा है, तो आप goto
कुछ बाइट्स को बचाने के लिए उपयोग कर सकते हैं । इसलिए इसके बजाय
((int(*)())L"ﻫ")();
या (यदि आपके पर्यावरण में अरबी ग्लिफ़ नहीं है)
((int(*)())L"\xfeeb")();
प्रयत्न, कोशिश
goto*&L"ﻫ";
या
goto*&L"\xfeeb";
इस उदाहरण में, eb fe
x86 मशीन भाषा है जैसे कुछfor(;;);
और का एक सरल उदाहरण है जो पैरामीटर नहीं लेता है और वापस नहीं आने वाला है :-)
यह पता चला है goto
कि आप कॉल करने वाले माता-पिता के लिए कोड कर सकते हैं ।
#include<stdio.h>
int f(int a){
if(!a)return 1;
goto*&L"\xc3c031"; // return 0;
return 2; // never gets here
}
int main(){
printf("f(0)=%d f(1)=%d\n",f(0),f(1));
}
उपरोक्त उदाहरण (लिनक्स पर संकलित और चला सकता है) gcc -O
) स्टैक लेआउट के प्रति संवेदनशील है।
संपादित करें: आपके टूलकिन के आधार पर, आपको -zexecstack
संकलन ध्वज का उपयोग करना पड़ सकता है ।
यदि यह तुरंत स्पष्ट नहीं है, तो यह उत्तर मुख्य रूप से लोल के लिए लिखा गया था। मैं इसे पढ़ने से बेहतर या बदतर गोल्फिंग या प्रतिकूल मनोवैज्ञानिक परिणामों के लिए कोई ज़िम्मेदारी नहीं लेता।