मान लीजिए कि मैं एक सी प्रोग्राम को संकलित करने के लिए GCC
का एक आधुनिक संस्करण उपयोग कर रहा हूं। इसके अलावा, इस बात पर विचार करें कि मेरे कार्यक्रम में पुरानी शाखाएं हैं, लेकिन मुझे उन अंतिम शाखाओं में मृत कोड की तरह अंतिम कार्यक्रम में संकलित और उपस्थित होना पसंद है। निम्नलिखित कार्यक्रम पर विचार करें: जाहिर हैक्या जीसीसी को निर्देश दिया जा सकता है कि मृत कोड को खत्म न किया जाए?
int main(int argc, char** argv) {
int a = 0;
goto skip;
a = -1;
skip: ;
return a;
}
, अगर मैं डिफ़ॉल्ट अनुकूलन सेटिंग्स के साथ GCC
उपयोग करते हैं, दूसरे काम अंतिम कार्यक्रम के लिए यह कर कभी नहीं होगा, के रूप में संकलक आसानी से बता सकते हैं कि यह कभी नहीं क्रियान्वित किया जाएगा। मान लीजिए कि मैं यह नहीं करना चाहता हूं।
GCC
में, झंडे कि मृत कोड (सबसे विशेष रूप -fdce
) के साथ तर की एक संख्या देखते हैं, और मैं जब जीसीसी तदनुसार लागू स्पष्ट रूप से निष्क्रिय करने के लिए चुन सकते हैं: जहाँ तक मैं बता सकता हूँ
-fno-dce
-fno-dse
-fno-tree-dce
-fno-tree-dse
, इसे GCC
को दूसरी असाइनमेंट के साथ गड़बड़ न करने का निर्देश देना चाहिए। फिर भी, संबंधित कोड इसे मेरे कार्यक्रम में कभी नहीं लग रहा है।
GCC
क्यों मृत कोड को हटाने पर जोर देता है, और क्या दूसरा असाइनमेंट से छुटकारा पाने के लिए जीसीसी को निर्देश देने का कोई तरीका नहीं है?
प्रयोग कर रहे हैं यह शाखाओं में दंड, आदि, जो अन्यथा हो सकता है जब 'उम्मीद' पथ लेने रोकने में मदद करता ? – anatolyg
मुझे 'अस्थिर' के बारे में पता है, लेकिन मैं उत्सुक हूं कि जीसीसी के साथ ऐसा करना संभव है या नहीं। जीसीसी के लिए मैं संस्करण 4.8.3 का उपयोग कर रहा हूं, लेकिन मुझे यह जानने में दिलचस्पी होगी कि कोई समाधान दिया गया है या नहीं! – Caterpillar
मेरी टिप्पणी को रद्द करें। अस्थिरता जीसीसी को असाइनमेंट छोड़ने से नहीं रोकती है। –