13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!