¿C admite la sobrecarga de funciones?

En primer lugar, ¿qué es la sobrecarga de funciones? La sobrecarga de funciones es una característica de un lenguaje de programación que permite tener muchas funciones con el mismo nombre pero con firmas diferentes. 
Esta característica está presente en la mayoría de los lenguajes orientados a objetos como C++ y Java. Pero C no es compatible con esta función, no por programación orientada a objetos, sino porque el compilador no la admite (excepto que puede usar _Generic). Sin embargo, uno puede lograr la funcionalidad similar en C indirectamente. Uno de los enfoques es el siguiente.
Tener un tipo de puntero void * como argumento para la función. Y otro argumento que indica el tipo de datos real del primer argumento que se está pasando.
 

   int foo(void * arg1, int arg2);

Supongamos que arg2 se puede interpretar de la siguiente manera. 0 = variable de tipo Struct1, 1 = variable de tipo Struct2, etc. Aquí, Struct1 y Struct2 son tipos de estructura definidos por el usuario.
Al llamar a la función foo en diferentes lugares…
 

    foo(arg1, 0);   /*Here, arg1 is pointer to struct type Struct1 variable*/
    foo(arg1, 1);    /*Here, arg1 is pointer to struct type Struct2 variable*/

Dado que el segundo argumento de foo realiza un seguimiento del tipo de datos del primer tipo, dentro de la función foo, se puede obtener el tipo de datos real del primer argumento mediante el encasillado correspondiente. es decir, dentro de la función foo
 

c

if(arg2 == 0)
{
  struct1PtrVar = (Struct1 *)arg1;
}
else if(arg2 == 1)
{
  struct2PtrVar = (Struct2 *)arg1;
}
else
{
  /*Error Handling*/
}

Puede haber otras formas de implementar la sobrecarga de funciones en C. Pero todas tendrán que usar punteros, la característica más poderosa de C. 
De hecho, se dice que sin usar los punteros, uno no puede usar C de manera eficiente & efectivamente en un programa del mundo real!
Tenga en cuenta que puede usar «varargs» para abordar esto.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *