2013-07-29 7 views
5

returns_twice मैं सिर्फ funciton ऊपर देख रहा था जीसीसी के लिए जिम्मेदार बताते हैं (http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html) और returns_twice विशेषता बारे में जाना।समारोह विशेषता

और मैं क्या मामला एक समारोह में दो बार लौट सकते में पूरी तरह से अनजान हूँ ... मैं जल्दी से उल्लेख किया vfork() और setjmp() लेकिन ऊपर देखा एक विचार कैसे एक लागू परिदृश्य की तरह लग रहा बिना जारी रखने - आप में से किसी को भी यह प्रयोग किया जाता है या एक व्याख्या कर सकते हैं बिट?

+4

धीरे-धीरे 'vfork() 'और' setjmp() 'देखो। – alk

उत्तर

4

setjmp समारोह एक लेबल (goto अर्थ में) बनाने के अनुरूप है, इस तरह के रूप में आप पहले setjmp से वापस आ जाएगी जब आप लेबल, और फिर हर बार है कि आप वास्तव में इसे करने के लिए कूद की स्थापना की।

यदि यह अजीब लगता है, तो बाकी आश्वासन दिया है, आपको अपने दैनिक प्रोग्रामिंग में setjmp का उपयोग नहीं करना चाहिए। या वास्तव में ... आपको शायद का उपयोग पर नहीं करना चाहिए। यह एक बहुत कम स्तर का कमांड है जो अपेक्षित निष्पादन प्रवाह को तोड़ता है (goto की तरह) और विशेष रूप से सी ++ में, अधिकांश आविष्कार जिन्हें आप उम्मीद कर सकते हैं।

1

जब आप setjmp पर कॉल करते हैं, तो यह एक वापसी बिंदु के रूप में स्थापित करता है, तो setjmp कॉल के तुरंत बाद निष्पादन कोड पर जारी रहता है।

कुछ बिंदु बाद में कोड में में बुला longjmp (कूद बफर setjmp करने के लिए पिछले कॉल द्वारा प्रारंभ के साथ) निष्पादन देता है फिर से है कि एक ही बिंदु से शुरू करने के लिए (जैसे कि, कोड तुरंत कॉल setjmp के बाद)।

इसलिए, मूल कॉल सामान्य रूप से वापस आती है, फिर बाद में मनमाने ढंग से, निष्पादन रिटर्न (या कम से कम वापसी) एक ही बिंदु पर फिर से लौटता है।

विशेषता केवल उस तथ्य के संकलक को चेतावनी देती है।

संबंधित मुद्दे