2011-10-20 38 views
6

Olası Çoğalt:
function overloading in CANSI C ve fonksiyon aşırı yükleme

ANSI C (ı C99 hakkında emin değil) işlevini aşırı izin vermez. örneğin

:

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

geçerli bir ANSI C kaynak kodu değil.

ANSI C'deki işlev aşırı yüklenme sorunu için hangi teknik (veya fikir) kullanılmalıdır?

Not:

bir cevap fonksiyonlarını yeniden adlandırma, ancak hangi model isimlerinin değiştirilmesi için kullanılması gerektiğini, bu fonksiyon isimleri 'iyi işlev adı' kalır? örneğin

:

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

bir iyi adlandırma için max işlev adı değildir. veri tipinin kullanılması

+1

Belki bir "max" makrosu tanımla? ;-) –

+0

@DidierTrosset: max sadece bir örnektir, görüntü çok karmaşık bir işlevdir. –

+2

Fonksiyon aşırı yüklenmesi sizin için önemliyse belki de C yerine C++ kullanmayı düşünmelisiniz? –

cevap

11

Bu örnekte, örnek

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

Bu, standart kütüphanenin yaptığı şeydir - örneğin “atoi()”, “atol()”, “atof()” ve “atod()”. – caf

0

için, işlev adı değerlendirilecek, uygun bir çözüm, bir makro kullanıyor. Ayrıca, mümkün olan en büyük tamsayıyı veya kayan nokta türünü alan ve argümanının daha küçük olduğu biliniyorsa derleyicinin onu en uygun duruma getirmesini sağlayan bir satır içi işlevi de kullanabilirsiniz. İmza vb. Konularda göz önünde bulundurmanız gereken bazı köşe durumları vardır, ancak bunlar zaten gerçekleşir.

İlgili konular