2011-10-20 44 views
6

thể trùng lặp:
function overloading in CANSI C và chức năng quá tải

ANSI C không cho phép chức năng quá tải (Tôi không chắc chắn về C99).

ví dụ:

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

không phải là một mã nguồn ANSI C hợp lệ.

Nên sử dụng kỹ thuật nào (hoặc ý tưởng) cho vấn đề quá tải hàm trong ANSI C?

Note:

Một câu trả lời được đổi tên chức năng, nhưng mà mẫu nên được sử dụng cho đổi tên, mà tên hàm vẫn 'tên hàm tốt'?

ví dụ:

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

không phải là một tốt đặt tên cho max tên hàm.

+1

Có thể xác định macro 'max'? ;-) –

+0

@DidierTrosset: max chỉ là một ví dụ, hình ảnh là một hàm rất phức tạp. –

+2

Nếu quá tải hàm quan trọng đối với bạn thì có lẽ bạn nên cân nhắc sử dụng C++ thay vì C? –

Trả lời

11

Sử dụng kiểu dữ liệu được đánh giá trong tên hàm, ví dụ

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

Đây là thư viện chuẩn làm gì - ví dụ chúng ta có 'atoi()', 'atol()', 'atof()' và 'atod()'. – caf

0

Trong ví dụ này, các giải pháp thích hợp được sử dụng một macro. Bạn cũng có thể chỉ cần sử dụng một hàm inline lấy số nguyên lớn nhất hoặc kiểu dấu phẩy động và cho phép trình biên dịch tối ưu hóa nó khi đối số được biết là nhỏ hơn. Có một số trường hợp góc bạn nên xem xét liên quan đến ký kết vv nhưng những người đã xảy ra anyway.

Các vấn đề liên quan