[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