2. C en C++
• Como C++ está basado en C, debería estar familiarizado
con la sintaxis de C para poder programar en C++, del
mismo modo que debería tener una fluidez razonable en
álgebra para poder hacer cálculos.
3. Creación de funciones
• En el antiguo C (previo al estándar), se podía invocar una función
con cualquier número y tipo de argumentos sin que el compilador
se quejase. Todo parecía ir bien hasta que ejecutabas el programa.
El programa acababa con resultados misteriosos (o peor, el
programa fallaba) sin ninguna pista del motivo. La falta de ayuda
acerca del paso de argumentos y los enigmáticos bugs que
resultaban es, probablemente, la causa de que C se considerase «un
lenguaje ensamblador de alto nivel». Los programadores de pre-
Estándar C simplemente se adaptaron.
4. Creación de funciones
• C y C++ Estándar usan una característica llamada prototipado de
funciones. Con esta herramienta se han de describir los tipos de
argumentos al declarar y definir una función. Esta descripción es el
“prototipo”. Cuando la función es llamada, el compilador usa el
prototipo para asegurar que los argumentos pasados son los
apropiados, y que el valor retornado es tratado correctamente. Si el
programador comete un error al llamar a la función, el compilador
detecta el error.
5. Creación de funciones
• En un prototipo de función, la lista de argumentos contiene los
tipos de argumentos que se deben pasar a la función y
(opcionalmente para la declaración), identificadores para los
argumentos. El orden y tipo de los argumentos debe coincidir en la
declaración, definición y llamada a la función. A continuación se
muestra un ejemplo de un prototipo de función en una declaración:
6. Creación de funciones
• No se puede usar la misma sintaxis para declarar los argumentos en
el prototipo de una función que en las definiciones ordinarias de
variables. Esto significa que no se puede escribir: float x, y, z. Se
debe indicar el tipo de cada argumento. En una declaración de
función, lo siguiente también es correcto:
7. Creación de funciones
• Ya que el compilador no hace más que checar los tipos cuando se
invoca la función, los identificadores se incluyen solamente para
mejorar la claridad del código cuando alguien lo está leyendo.
• En la definición de la función, los nombres son necesarios ya que los
argumentos son referenciados dentro de la función:
8. Creación de funciones
• Esta regla sólo se aplica a C. En C++, un argumento puede no tener
nombrado en la lista de argumentos de la definición de la función.
Como no tiene nombre, no se puede utilizar en el cuerpo de la
función, por supuesto. Los argumentos sin nombre se permiten
para dar al programador una manera de “reservar espacio en la lista
de argumentos”. De cualquier modo, la persona que crea la función
aún así debe llamar a la función con los parámetros apropiados.
9. Creación de funciones
• Sin embargo, la persona que crea la función puede utilizar el
argumento en el futuro sin forzar una modificación en el código que
llama a la función. Esta opción de ignorar un argumento en la lista
también es posible si se indica el nombre, pero siempre aparecería
un molesto mensaje de advertencia, informando que el valor no se
utiliza, cada vez que se compila la función. La advertencia
desaparece si se quita el nombre del argumento.
10. Creación de funciones
• C y C++ tienen otras dos maneras de declarar una lista de
argumentos. Si se tiene una lista de argumentos vacía, se puede
declarar esta como func( ) en C++, lo que indica al compilador que
hay exactamente cero argumentos. Hay que tener en cuenta que
esto sólo significa una lista de argumentos vacía en C++. En C
significa “un número indeterminado de argumentos” (lo que es un
“agujero” en C ya que deshabilita la comprobación de tipos en ese
caso).
11. Creación de funciones
• En ambos, C y C++, la declaración func(void); significa una lista de
argumentos vacía. La palabra clave void significa “nada” en este
caso (también puede significar “sin tipo” en el caso de los punteros,
como se verá mas adelante
12. Valores de retorno de las funciones
• En ambos, C y C++, la declaración func(void); significa una lista de
argumentos vacía. La palabra clave void significa “nada” en este
caso (también puede significar “sin tipo” en el caso de los punteros,
como se verá mas adelante.
13. Valores de retorno de las funciones
• Un prototipo de función C++ debe especificar el tipo de valor
devuelto de la función (en C, si no se especifica será por defecto un
int). La especificación del tipo de retorno precede al nombre de la
función. Para especificar que no se devolverá valor alguno, se utiliza
la palabra reservada void. Esto provocará un error si se intenta
devolver un valor desde la función. A continuación hay algunos
prototipos completos de funciones:
17. Valores de retorno de las funciones
• En cfunc( ), el primer if que comprueba que la condición
sea true sale de la función con la sentencia return. Fíjese
que la declaración de la función no es necesaria puesto
que la definición aparece antes de ser utilizada en main( ),
de modo que el compilador sabe de su existencia desde
dicha definición.
18. Verdadero y falso
• Todas las sentencias condicionales utilizan la veracidad o la falsedad
de una expresión condicional para determinar el camino de
ejecución. Un ejemplo de expresión condicional es A == B. Esto
utiliza el operador condicional == para saber si la variable A es
equivalente a la variable B. La expresión produce un booleano true
o false (estas son palabras reservadas sólo en C++; en C una
expresión es verdadera( true) si se evalúa con un valor diferente de
cero). Otros operadores condicionales son >, <, >=, etc.
19. Verdadero y falso
• Todas las sentencias condicionales utilizan la veracidad o la falsedad
de una expresión condicional para determinar el camino de
ejecución. Un ejemplo de expresión condicional es A == B. Esto
utiliza el operador condicional == para saber si la variable A es
equivalente a la variable B. La expresión produce un booleano true
o false (estas son palabras reservadas sólo en C++; en C una
expresión es verdadera( true) si se evalúa con un valor diferente de
cero). Otros operadores condicionales son >, <, >=, etc.
20. if-else
• La sentencia if-else puede existir de dos formas: con o sin
el else. Las dos formas son: