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