11.05.2013 Views

Guía de estilo de programación en C++ estructurado

Guía de estilo de programación en C++ estructurado

Guía de estilo de programación en C++ estructurado

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

inline Punto crearPunto(double a, double b)<br />

{<br />

Punto p = { a, b };<br />

return p;<br />

}<br />

double calculaDistancia(const Punto &p1, const Punto &p2)<br />

{<br />

return abs( calculaDistanciaOrig<strong>en</strong>( p1 )<br />

– calculaDistanciaOrig<strong>en</strong>( p2 ) )<br />

;<br />

}<br />

La línea #ifn<strong>de</strong>f _PUNTO_H_ y la sigui<strong>en</strong>te lo que hac<strong>en</strong> es evitar que se compile la cabecera<br />

punto.h más <strong>de</strong> una vez. Ésto pue<strong>de</strong> suce<strong>de</strong>r inadvertidam<strong>en</strong>te <strong>en</strong> un proyecto complejo, cuando<br />

más <strong>de</strong> una cabecera incluye la primera. El diagnóstico <strong>de</strong> este problema es s<strong>en</strong>cillo, pues <strong>en</strong> ese<br />

caso el compilador se quejaría <strong>de</strong> una re<strong>de</strong>claración <strong>de</strong>l módulo Punto.<br />

Nótese que se ha incluido un objeto constante. Para po<strong>de</strong>r ser utilizado <strong>de</strong>be ser <strong>de</strong>clarado<br />

<strong>en</strong> el fichero <strong>de</strong> cabecera, con extern, si bi<strong>en</strong> nunca <strong>de</strong>finido (la cabecera pue<strong>de</strong> ser incluida <strong>en</strong><br />

varias unida<strong>de</strong>s <strong>de</strong> traducción: poner la <strong>de</strong>finición <strong>en</strong> la cabecera significaría que todas ellas<br />

t<strong>en</strong>drían un objeto puntoOrig<strong>en</strong> distinto, aunque con el mismo i<strong>de</strong>ntificador, lo que provocaría un<br />

error <strong>de</strong> <strong>en</strong>lace). La <strong>de</strong>finición, como pue<strong>de</strong> verse, aparece <strong>en</strong> el fichero <strong>de</strong> implem<strong>en</strong>tación,<br />

mi<strong>en</strong>tras que <strong>en</strong> el fichero <strong>de</strong> cabecera aparece una <strong>de</strong>claración con extern, <strong>de</strong> manera que el<br />

compilador sepa que está <strong>de</strong>finida <strong>en</strong> algún módulo (pero sólo <strong>en</strong> uno, claro, <strong>en</strong> otro caso se<br />

produce otro error).<br />

Si, <strong>en</strong> cambio, se <strong>de</strong>sea que un objeto no sea público, <strong>de</strong>be omitirse cualquier m<strong>en</strong>ción sobre<br />

él <strong>en</strong> la cabecera, y <strong>en</strong> el mom<strong>en</strong>to <strong>de</strong> la <strong>de</strong>finición <strong>en</strong> el archivo <strong>de</strong> implem<strong>en</strong>tación <strong>de</strong>be añadirse<br />

el modificador static (que <strong>en</strong> este caso <strong>de</strong> aplicación significa privado, y no ti<strong>en</strong>e, explícitam<strong>en</strong>te,<br />

el mismo significado que cuando se aplica a una variable local <strong>de</strong> una función).<br />

5.2 Funciones<br />

En las funciones, se <strong>de</strong>be adoptar como esquema básico la típica estructura inicialización<strong>de</strong>sarrollo­limpieza,<br />

es <strong>de</strong>cir el comi<strong>en</strong>zo <strong>de</strong> la tarea, inicializando (y creando, cuando sea oportuno)<br />

las variables necesarias, el <strong>de</strong>sarrollo <strong>de</strong>l problema, como el bucle <strong>de</strong>l ejemplo situado más abajo,y<br />

finalm<strong>en</strong>te, cuando es necesario, la limpieza <strong>de</strong> los recursos utilizados.<br />

int sumaFicheroDatos(const char nombreFichero[])<br />

/**<br />

Lee el cont<strong>en</strong>ido <strong>de</strong> un archivo <strong>de</strong> texto, <strong>en</strong> el que cada línea es un<br />

número <strong>en</strong>tero, y lo suma.<br />

@param nombreFichero El nombre <strong>de</strong> fichero a cargar<br />

@return La suma <strong>de</strong> todos los valores <strong>en</strong> el fichero.<br />

**/<br />

{<br />

int num;<br />

int toret = 0;<br />

FILE * f = fop<strong>en</strong>( nombreFichero, “rt” );<br />

if ( f != NULL ) {<br />

fscanf( f, “%d\n”, &num );<br />

while( !feof( f ) ) {<br />

toret += num;<br />

fscanf( f, “%d\n”, &num );<br />

}<br />

fclose( f );

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

Saved successfully!

Ooh no, something went wrong!