2011-10-20 9 views
6

Eventuali duplicati:
function overloading in CANSI C e la funzione di sovraccarico

ANSI C non consente la funzione di sovraccarico (non lo faccio sicuro di C99).

ad esempio:

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

non è un codice sorgente ANSI C valido.

Quale tecnica (o idea) deve essere utilizzata per il problema di sovraccarico di funzione in ANSI C?

Nota:

una risposta è rinominando le funzioni, ma quale modello deve essere utilizzato per la ridenominazione, che i nomi delle funzioni rimangono 'buon nome della funzione'?

ad esempio:

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

non è un buon denominazione per max nome della funzione.

+1

Forse definire una macro 'max'? ;-) –

+0

@DidierTrosset: max è solo un esempio, l'immagine è una funzione molto complessa. –

+2

Se l'overloading delle funzioni è importante per te allora forse dovresti prendere in considerazione l'uso di C++ anziché di C? –

risposta

11

Utilizzando il tipo di dati da valutare il nome della funzione, ad esempio

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

Questo è ciò che fa la libreria standard - per esempio abbiamo 'atoi()', 'atol()', 'atof()' e 'atod()'. – caf

0

In questo esempio, la soluzione adeguata utilizza una macro. Si potrebbe anche semplicemente usare una funzione inline che prende il più grande intero possibile o il tipo a virgola mobile e lasciare che il compilatore lo ottimizzi quando l'argomento è noto per essere più piccolo. Ci sono alcuni casi che dovresti prendere in considerazione per quanto riguarda la firma, ecc., Ma questi accadono già in ogni caso.