2011-10-20 13 views
6

Powiel możliwe:
function overloading in CANSI C i funkcja przeciążenia

ANSI C nie przeciążania funkcji pozwalają (nie jestem pewien C99).

np

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

nie jest poprawny kod źródłowy ANSI C.

Którą technikę (lub pomysł) należy zastosować do problemu przeciążenia funkcji w ANSI C?

Uwaga:

Odpowiedź jest zmiana nazwy funkcji, lecz wzór powinien być stosowany do zmiany nazwy, czyli nazwy funkcji pozostają „dobra nazwa funkcji”?

na przykład:

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

nie jest dobry nazywania dla max nazwa funkcji.

+1

Może zdefiniować makro 'max'? ;-) –

+0

@DidierTrosset: max to tylko przykład, obraz bardzo złożonej funkcji. –

+2

Jeśli funkcja przeciążania jest dla ciebie ważna, to może powinieneś rozważyć użycie C++ zamiast C? –

Odpowiedz

11

Stosując typ danych do oceny w nazwie, na przykład z

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

Tak robi standardowa biblioteka - na przykład mamy 'atoi()', 'atol()', 'atof()' i 'atod()'. – caf

0

W tym przykładzie, rozwiązaniem jest użycie makro. Można również po prostu użyć funkcji inline, która pobiera największą możliwą liczbę całkowitą lub zmiennoprzecinkową i pozwolić kompilatorowi zoptymalizować ją, gdy argument będzie mniejszy. Jest kilka przypadków, które należy wziąć pod uwagę w odniesieniu do sygnowania itp., Ale tak się już dzieje.