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
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>sarrollolimpieza,<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 );