2011-10-20 19 views
6

संभव डुप्लिकेट:
function overloading in Cएएनएसआई सी और समारोह अधिक भार

एएनएसआई सी समारोह ओवरलोडिंग की अनुमति नहीं देता (मैं C99 बारे में निश्चित नहीं करते हैं)।

उदाहरण के लिए

:

char max(char x, char y); 
short max(short x, short y); 
int max(int x, int y); 
float max(float x, float y); 

एक वैध एएनएसआई सी स्रोत कोड नहीं है।

एएनएसआई सी में फ़ंक्शन ओवरलोडिंग समस्या के लिए कौन सी तकनीक (या विचार) का उपयोग किया जाना चाहिए?

नोट:

एक उत्तर कार्यों का नाम बदलने है, लेकिन जो पैटर्न नाम के लिए इस्तेमाल किया जाना चाहिए, कि फ़ंक्शन नाम 'अच्छा समारोह का नाम' रहते हैं?

उदाहरण के लिए

:

char max1(char x, char y); 
short max2(short x, short y); 
int max3(int x, int y); 
float max4(float x, float y); 

एक अच्छा नामकरण के लिए max समारोह नाम नहीं है।

+1

शायद 'अधिकतम' मैक्रो परिभाषित करें? ;-) –

+0

@DidierTrosset: अधिकतम केवल एक उदाहरण है, छवि एक बहुत ही जटिल कार्य है। –

+2

यदि फ़ंक्शन ओवरलोडिंग आपके लिए महत्वपूर्ण है तो शायद आपको सी के बजाय सी ++ का उपयोग करने पर विचार करना चाहिए? –

उत्तर

11

डेटा प्रकार का उपयोग करना, समारोह के नाम पर मूल्यांकन किया जाना इस उदाहरण में उदाहरण

char max_char(char x, char y); 
short max_short(short x, short y); 
int max_int(int x, int y); 
float max_float(float x, float y); 
+1

मानक पुस्तकालय यही करता है - उदाहरण के लिए हमारे पास 'atoi()', 'atol()', 'atof()' और 'atod()' है। – caf

0

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

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