Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 41 — #79<br />
✐<br />
2.2. Herrami<strong>en</strong>tas para compilación modular<br />
2.2.1. Declaraciones vs definiciones<br />
Es importante compr<strong>en</strong>der la difer<strong>en</strong>cia <strong>en</strong>tre declaraciones y definiciones porque<br />
estos términos se usarán de forma precisa <strong>en</strong> todo el libro. Básicam<strong>en</strong>te todos los<br />
programas escritos <strong>en</strong> C o <strong>en</strong> <strong>C++</strong> requier<strong>en</strong> declaraciones. Antes de poder escribir<br />
su primer programa, necesita compr<strong>en</strong>der la manera correcta de escribir una declaración.<br />
Una declaración pres<strong>en</strong>ta un nombre -id<strong>en</strong>tificador- al compilador. Le dice al compilador<br />
«Esta función o esta variable existe <strong>en</strong> algún lugar, y éste es el aspecto que<br />
debe t<strong>en</strong>er». Una definición, sin embargo, dice: «Crea esta variable aquí» o «Crea esta<br />
función aquí». Eso reserva memoria para el nombre. Este significado sirve tanto para<br />
una variable que para una función; <strong>en</strong> ambos casos, el compilador reserva espacio<br />
<strong>en</strong> el mom<strong>en</strong>to de la definición. Para una variable, el compilador determina su tamaño<br />
y reserva el espacio <strong>en</strong> memoria para cont<strong>en</strong>er los datos de la variable. Para<br />
una función, el compilador g<strong>en</strong>era el código que finalm<strong>en</strong>te ocupará un espacio <strong>en</strong><br />
memoria.<br />
Se puede declarar una variable o una función <strong>en</strong> muchos sitios difer<strong>en</strong>tes, pero <strong>en</strong><br />
C o <strong>en</strong> <strong>C++</strong> sólo se puede definir una vez (se conoce a veces como Regla de Definición<br />
Única (ODR) 3 ). Cuando el <strong>en</strong>lazador une todos los módulos objeto, normalm<strong>en</strong>te se<br />
quejará si <strong>en</strong>cu<strong>en</strong>tra más de una definición para la misma función o variable.<br />
Una definición puede ser también una declaración. Si el compilador no ha visto<br />
antes el nombre x y hay una definición int x;, el compilador ve el nombre también<br />
como una declaración y asigna memoria al mismo tiempo.<br />
Sintaxis de declaración de funciones<br />
La declaración de una función <strong>en</strong> C y <strong>en</strong> <strong>C++</strong> consiste <strong>en</strong> escribir el nombre de la<br />
función, los tipos de argum<strong>en</strong>tos que se pasan a la función, y el valor de retorno de<br />
la misma. Por ejemplo, aquí t<strong>en</strong>emos la declaración de una función llamada func-<br />
1() que toma dos <strong>en</strong>teros como argum<strong>en</strong>tos (<strong>en</strong> C/<strong>C++</strong> los <strong>en</strong>teros se d<strong>en</strong>otan con<br />
la palabra reservada int) y que devuelve un <strong>en</strong>tero:<br />
int func1(int, int);<br />
La primera palabra reservada es el valor de retorno: int. Los argum<strong>en</strong>tos están<br />
<strong>en</strong>cerrados <strong>en</strong>tre paréntesis después del nombre de la función <strong>en</strong> el ord<strong>en</strong> <strong>en</strong> que<br />
se utilizan. El punto y coma indica el final de la s<strong>en</strong>t<strong>en</strong>cia; <strong>en</strong> este caso le dice al<br />
compilador «esto es todo - ¡aquí no está la definición de la función!».<br />
Las declaraciones <strong>en</strong> C y <strong>C++</strong> tratan de mimetizar la forma <strong>en</strong> que se utilizará ese<br />
elem<strong>en</strong>to. Por ejemplo, si a es otro <strong>en</strong>tero la función de arriba se debería usar de la<br />
sigui<strong>en</strong>te manera:<br />
a = func1(2, 3);<br />
Como func1() devuelve un <strong>en</strong>tero, el compilador de C/<strong>C++</strong> comprobará el<br />
uso de func1() para asegurarse que a puede aceptar el valor devuelto y que los<br />
argum<strong>en</strong>tos son válidos.<br />
Los argum<strong>en</strong>tos de las declaraciones de funciones pued<strong>en</strong> t<strong>en</strong>er nombres. El compilador<br />
los ignora pero pued<strong>en</strong> ser útilies como nemotécnicos para el usuario. Por<br />
3 One Definition Rule<br />
41<br />
✐<br />
✐<br />
✐<br />
✐