Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 64 — #102<br />
✐<br />
Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />
función. Esta descripción es el «prototipo». Cuando la función es llamada, el compilador<br />
usa el prototipo para asegurar que los argum<strong>en</strong>tos pasados son los apropiados,<br />
y que el valor retornado es tratado correctam<strong>en</strong>te. Si el programador comete un error<br />
al llamar a la función, el compilador detecta el error.<br />
Es<strong>en</strong>cialm<strong>en</strong>te, apr<strong>en</strong>dió sobre prototipado de funciones (sin llamarlas de ese modo)<br />
<strong>en</strong> el capítulo previo, ya que la forma de declararlas <strong>en</strong> <strong>C++</strong> requiere de un prototipado<br />
apropiado. En un prototipo de función, la lista de argum<strong>en</strong>tos conti<strong>en</strong>e los<br />
tipos de argum<strong>en</strong>tos que se deb<strong>en</strong> pasar a la función y (opcionalm<strong>en</strong>te para la declaración),<br />
id<strong>en</strong>tificadores para los argum<strong>en</strong>tos. El ord<strong>en</strong> y tipo de los argum<strong>en</strong>tos<br />
debe coincidir <strong>en</strong> la declaración, definición y llamada a la función. A continuación<br />
se muestra un ejemplo de un prototipo de función <strong>en</strong> una declaración:<br />
int translate(float x, float y, float z);<br />
No se puede usar la misma sintaxis para declarar los argum<strong>en</strong>tos <strong>en</strong> el prototipo<br />
de una función que <strong>en</strong> las definiciones ordinarias de variables. Esto significa que no<br />
se puede escribir: float x, y, z. Se debe indicar el tipo de cada argum<strong>en</strong>to. En<br />
una declaración de función, lo sigui<strong>en</strong>te también es correcto:<br />
int translate(float, float, float);<br />
Ya que el compilador no hace más que chequear los tipos cuando se invoca la función,<br />
los id<strong>en</strong>tificadores se incluy<strong>en</strong> solam<strong>en</strong>te para mejorar la claridad del código<br />
cuando algui<strong>en</strong> lo está ley<strong>en</strong>do.<br />
En la definición de la función, los nombres son necesarios ya que los argum<strong>en</strong>tos<br />
son refer<strong>en</strong>ciados d<strong>en</strong>tro de la función:<br />
int translate(float x, float y, float z) {<br />
x = y = z;<br />
// ...<br />
}<br />
Esta regla sólo se aplica a C. En <strong>C++</strong>, un argum<strong>en</strong>to puede no t<strong>en</strong>er nombrado <strong>en</strong><br />
la lista de argum<strong>en</strong>tos de la definición de la función. Como no ti<strong>en</strong>e nombre, no se<br />
puede utilizar <strong>en</strong> el cuerpo de la función, por supuesto. Los argum<strong>en</strong>tos sin nombre<br />
se permit<strong>en</strong> para dar al programador una manera de «reservar espacio <strong>en</strong> la lista de<br />
argum<strong>en</strong>tos». De cualquier modo, la persona que crea la función aún así debe llamar<br />
a la función con los parámetros apropiados. Sin embargo, la persona que crea<br />
la función puede utilizar el argum<strong>en</strong>to <strong>en</strong> el futuro sin forzar una modificación <strong>en</strong> el<br />
código que llama a la función. Esta opción de ignorar un argum<strong>en</strong>to <strong>en</strong> la lista también<br />
es posible si se indica el nombre, pero siempre aparecería un molesto m<strong>en</strong>saje<br />
de advert<strong>en</strong>cia, informando que el valor no se utiliza, cada vez que se compila la<br />
función. La advert<strong>en</strong>cia desaparece si se quita el nombre del argum<strong>en</strong>to.<br />
C y <strong>C++</strong> ti<strong>en</strong><strong>en</strong> otras dos maneras de declarar una lista de argum<strong>en</strong>tos. Si se ti<strong>en</strong>e<br />
una lista de argum<strong>en</strong>tos vacía, se puede declarar esta como func() <strong>en</strong> <strong>C++</strong>, lo<br />
que indica al compilador que hay exactam<strong>en</strong>te cero argum<strong>en</strong>tos. Hay que t<strong>en</strong>er <strong>en</strong><br />
cu<strong>en</strong>ta que esto sólo significa una lista de argum<strong>en</strong>tos vacía <strong>en</strong> <strong>C++</strong>. En C significa<br />
«un número indeterminado de argum<strong>en</strong>tos» (lo que es un «agujero» <strong>en</strong> C ya que<br />
deshabilita la comprobación de tipos <strong>en</strong> ese caso). En ambos, C y <strong>C++</strong>, la declaración<br />
func(void); significa una lista de argum<strong>en</strong>tos vacía. La palabra clave void<br />
significa «nada» <strong>en</strong> este caso (también puede significar «sin tipo» <strong>en</strong> el caso de los<br />
64<br />
✐<br />
✐<br />
✐<br />
✐