[C con Clase] Funciones con valores por defecto.

Steven Davidson srd4121 en njit.edu
Vie Oct 3 01:45:03 CEST 2008


Hola Zaka,

Zaka Elab wrote:
> He leído en el Capítulo 20
> (http://c.conclase.net/curso/index.php?cap=020) que las funciones
> puede tener valores por defecto. Pero que estos se rigen por las
> siguientes reglas:
> 
> 1) Sólo los últimos argumentos de las funciones pueden tener valores
> por defecto.
> 2) De estos, sólo los últimos argumentos pueden ser omitidos en una 
> llamada.
> 3) Los valores por defecto deben especificarse bien en los
> prototipos, bien en las declaraciones, pero no en ambos.
> 
> Y más tarde presenta un ejemplo con el que yo tengo alguna duda:
> 
> void funcion3(int a, int b=3, int c) // Legal
> 
> Según la regla 1) solo los últimos argumentos pueden tener valores
> por defecto.
> Lo que deduzco de los ejemplos de código del capítulo, es que todos
> los argumentos menos el primero pueden tener valores por defecto.
> 

Ten presente que el ejemplo es el siguiente:

void funcion3(int, int, int=1); // Legal
...
void funcion3(int a, int b=3, int c) // Legal
{
}

Es decir, tenemos el prototipo y su definición (o implementación). En 
todo caso, se quebranta la regla #3.

La regla principal es que no podemos redefinir ni sustituir un valor por
defecto por otro para el mismo argumento. Por ejemplo,

void f( int i = 1 );
void f( int r = 1 );  // Error: redefinición
void f( int s = 3 );  // Error: sustitución


Espero haber aclarado las dudas.

Steven





Más información sobre la lista de distribución Cconclase