2011-10-20 25 views
6

Duplicar posible:
function overloading in CANSI C y la sobrecarga de funciones

ANSI C no permite la sobrecarga de funciones (yo no está seguro acerca de C99).

por ejemplo:

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

no es un código fuente válida ANSI C.

¿Qué técnica (o idea) debería usarse para el problema de sobrecarga de funciones en ANSI C?

Nota:

una respuesta es el cambio de nombre de las funciones, pero que el patrón se debe utilizar para el cambio de nombre, que los nombres de las funciones permanecen 'buen nombre de la función'?

por ejemplo:

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

no es una buena nombrar para max nombre de la función.

+1

Quizás definir una macro 'max'? ;-) –

+0

@DidierTrosset: max es solo un ejemplo, la imagen es una función muy compleja. –

+2

Si la sobrecarga de funciones es importante para usted, entonces quizás debería considerar usar C++ en lugar de C? –

Respuesta

11

Utilizando el tipo de datos a ser evaluados en el nombre de la función, por ejemplo

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

Esto es lo que hace la biblioteca estándar, por ejemplo, tenemos 'atoi()', 'atol()', 'atof()' y 'atod()'. – caf

0

En este ejemplo, la solución apropiada está utilizando una macro. También podría simplemente usar una función en línea que tome el tipo entero más grande posible o de coma flotante y permita que el compilador lo optimice cuando se sabe que el argumento es más pequeño. Hay algunos casos de esquina que debes considerar con respecto a la firma, etc., pero eso ya ocurre de todos modos.

Cuestiones relacionadas