Está en la página 1de 15

Algoritmos y Lenguajes de Programación I

C en C++

Winston E. Morteo Sánchez


wmorteo@hotmail.com
1
3. 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.

2
3.1 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.

En 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. 3
3.1 Creación de funciones.

Esencialmente, aprendió sobre prototipado de funciones (sin
llamarlas de ese modo) en el capítulo previo, ya que la
forma de declararlas en C++ requiere de un prototipado
apropiado.

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

4
3.1 Creación de funciones.

A continuación se muestra un ejemplo de un prototipo de
función en una declaración:

int translate(float x, float y, float z);

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.

5
3.1 Creación de funciones.

En una declaración de función, lo siguiente también es
correcto:

int translate(float, float, float);

Ya que el compilador no hace más que chequear 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:

int translate(float x, float y, float z) { x = y = z; }

6
3.1 Creación de funciones.

C y C++ tienen otras 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 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.

7
3.1 Creación de funciones.

La otra opción para las listas de argumentos se produce
cuando no se sabe cuantos argumentos o qué tipos tendrán
los argumentos; esto se conoce como lista de argumentos
variable.

Esta «lista incierta de argumentos» se representada con
puntos suspensivos (...).

Definir una función con una lista de argumentos variable es
significativamente más complicado que definir una función
normal.

8
3.1 Creación de funciones.

Se puede utilizar una lista de argumentos variable para una
función que tiene un grupo de argumentos fijos si se quiere
deshabilitar la comprobación del prototipo de función.

Por eso, se debe restringir el uso de listas de argumentos
variables en C y evitarlas en C++ (en el cual, como
aprenderá, hay alternativas mucho mejores).

El manejo de listas de argumentos variables se describe en
la sección de librerías de la documentación de su entorno C
particular.

9
3.1.1. 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.

10
3.1.1. Valores de retorno de las funciones.

A continuación hay algunos prototipos completos de
funciones:

int f1(void); // Devuelve un entero, no tiene argumentos

int f2(); // igual que f1() en C++ pero no en C Stantard

float f3(float, int, char, double); // Devuelve un float

void f4(void); // No toma argumentos, no devuelve nada

11
3.1.1. Valores de retorno de las funciones.

Para devolver un valor desde una función, se utiliza la
sentencia return.

Esta sentencia termina la función y salta hasta la sentencia
que se halla justo después de la llamada a la función.

Si return tiene un argumento, se convierte en el valor de
retorno de la función.

Si una función indica que retornara un tipo en particular,
entonces cada sentencia return debe retornar un valor de
ese tipo.

12
3.1.1. Valores de retorno de las funciones.

Puede haber más de una sentencia return en una definición
de función:
//: C03:Return.cpp
// Use of "return"
#include <iostream>
using namespace std;

char cfunc(int i) { int main() {


if(i == 0) return 'a'; cout << "type an integer: ";
if(i == 1) return 'g'; int val;
if(i == 5) return 'z'; cin >> val;
return 'c'; cout << cfunc(val) << endl;
} }

13
3.1.1. 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.

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.

14
3.1.1. 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.

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.

15

También podría gustarte