2015-02-11 12 views
5

कहा जाता नहीं है, तो आप कुछ इस तरह है करने के लिए होता है: यह है कि अगर num बड़ा या छोटा तो 99 ईथर func या func2 है पर निर्भर करता है हो जाएगा उम्मीद करने केक्या एक स्थिर सी समारोह है कि

int _tmain(int argc, _TCHAR* argv[]) { 
    int i; 
#if (num>99) 
    i = func(); 
#else 
    i= func2(); 
#endif 
    return 0; 
} 

static int func() 
{ 
    return 1; 
} 
static int func2() 
{ 
    return 2; 
} 

यह उचित है रनटाइम कोड से हटा दिया गया?

या क्या मुझे इस लक्ष्य को प्राप्त करने के लिए #if में फ़ंक्शंस को एम्बेड करने की आवश्यकता होगी?

+6

"रनटाइम कोड" सी मानक का हिस्सा नहीं है, इसलिए सी मानक इस प्रश्न का उत्तर नहीं दे सकता है। यह एक बात है कि आपका लिंकर कैसे काम करता है। डेड कोड हटाने निश्चित रूप से एक ज्ञात और उपयोग की गई अनुकूलन रणनीति है जो कई प्लेटफ़ॉर्म पर उपलब्ध है। –

उत्तर

2

यह लिंकर पर निर्भर करता है, मृत कोड के साथ यह लिंकर विशिष्ट है। यह सुनिश्चित करने के लिए कि यह मशीन कोड में नतीजा है, आपको #if के तहत फ़ंक्शन परिभाषा भी शामिल करनी चाहिए।

1

यह अनुकूलन स्तर पर निर्भर करता है। लिनक्स पर आप इसे readelf -s ./a.out | grep func2

पर विचार कर सकते हैं लेकिन मुझे लगता है कि आप विंडोज का उपयोग करते हैं, इसलिए आपको उदाहरण के लिए कुछ समान टूल http://www.pe-explorer.com/ की आवश्यकता है। Any tool/software in windows for viewing ELF file format?

1

तुम भी कार्यशील परिभाषाएँ एम्बेड करने के लिए एक #if में लक्ष्य को प्राप्त करने की आवश्यकता होगी:

यहाँ उपकरणों की सूची है।

मान लीजिए कि चर "संख्या" आबादी वाले प्रपत्र विन्यास प्राप्त हो रही है:

कोड कुछ इस तरह हो सकता है।

int _tmain(int argc, _TCHAR* argv[]) { 
    int i; 
#if (num>99) 
    i = func(); 
#else 
    i= func2(); 
#endif 
    return 0; 
} 

#if(num>99) 
static int func() 
{ 
    return 1; 
} 
#else 
static int func2() 
{ 
    return 2; 
} 
#endif 

उम्मीद है कि यह मदद करता है। धन्यवाद!

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