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 268 — #306<br />

✐<br />

Capítulo 9. Funciones inline<br />

inline void Rectangle::setHeight(int h) {<br />

height = h;<br />

}<br />

int main() {<br />

Rectangle r(19, 47);<br />

// Transpose width & height:<br />

int iHeight = r.getHeight();<br />

r.setHeight(r.getWidth());<br />

r.setWidth(iHeight);<br />

} ///:~<br />

Ahora si quiere comparar el efecto de la funciones inline con la versión conv<strong>en</strong>cional,<br />

simplem<strong>en</strong>te borre la palabra inline. (Las funciones inline normalm<strong>en</strong>te<br />

deberían aparec<strong>en</strong> <strong>en</strong> los ficheros de cabecera, no obstante, las funciones no-inline<br />

deberían residir <strong>en</strong> un propia unidad de traducción). Si quiere poner las funciones <strong>en</strong><br />

la docum<strong>en</strong>tación, es tan simple como un «copiar y pegar». Las funciones in situ requier<strong>en</strong><br />

más trabajo y ti<strong>en</strong><strong>en</strong> más posibilidades de provocar errores. Otro argum<strong>en</strong>to<br />

para esta propuesta es que siempre puede producir un estilo de formato consist<strong>en</strong>te<br />

para las definiciones de función, algo que no siempre ocurre con las funciones in situ.<br />

9.6. Más características del preprocesador<br />

Antes, se dijo que casi siempre se prefiere usar funciones inline <strong>en</strong> lugar de macros<br />

del preprocesador. Las excepciones aparec<strong>en</strong> cuando necesita usar tres propiedades<br />

especiales del preprocesador de C (que es también el preprocesador de <strong>C++</strong>):<br />

[FIXME(hay más):cad<strong>en</strong>ización] (stringizing), concat<strong>en</strong>ación de cad<strong>en</strong>as, y <strong>en</strong>colado<br />

de símbolos (tok<strong>en</strong> pasting). Stringizing, ya com<strong>en</strong>tado anteriorm<strong>en</strong>te <strong>en</strong> el libro,<br />

se efectúa con la directiva # y permite tomar un id<strong>en</strong>tificador y convertirlo <strong>en</strong> una<br />

cad<strong>en</strong>a de caracteres. La concat<strong>en</strong>ación de cad<strong>en</strong>as ti<strong>en</strong>e lugar cuando dos cad<strong>en</strong>as<br />

adyac<strong>en</strong>tes no ti<strong>en</strong><strong>en</strong> puntuación, <strong>en</strong> cuyo caso se combinan. Estas dos propiedades<br />

son especialm<strong>en</strong>te útiles cuando se escribe código de depuración. Así,<br />

#define DEBUG(x) cout

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

Saved successfully!

Ooh no, something went wrong!