कोड जो मैंने देखा है (दिखाए गए सभी उपयोगों का उपयोग):क्या कंपाइलर आंतरिक लूप से बचने का अनुकूलन करेगा?
bool done = false;
for(int i = 0; i < big; i++)
{
...
for(int j = 0; j < wow; j++)
{
...
if(foo(i,j))
{
done = true;
break;
}
...
}
if(done) break;
...
}
कोई भी कंपाइलर्स इसे इस रूप में परिवर्तित करेगा:
for(int i = 0; i < big; i++)
{
...
for(int j = 0; j < wow; j++)
{
...
if(foo(i,j))
goto __done; // same as a labeled break if we had it
...
}
...
}
__done:;
नोट: जबकि मुझे अधिकतर दिलचस्पी है if(done)break;
मृत कोड के रूप में बाईपास और हटा दिया जाता है, मुझे यह भी रूचि है कि यह और done
पूरी तरह से हटा दिया जाता है।
वैसे, आपको किसी भी प्रतीक को परिभाषित नहीं करना चाहिए जो दो अंडरस्कोर से शुरू होता है; ऐसे प्रतीक आरक्षित हैं। –
प्रतीक ऑप्टिमाइज़ेशन पास का परिणाम होगा, e.i. संकलक द्वारा उत्पन्न किया गया। मैंने उस नाम का उपयोग किया * क्योंकि * यह एक आरक्षित/आंतरिक नाम इंगित करता है। – BCS
और सवाल: यह एक समारोह में क्यों नहीं फंस गया है?आप तब 'वापसी' का उपयोग कर सकते हैं;) –