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 253 — #291<br />

✐<br />

9.1. Los peligros del preprocesador<br />

El problema anterior puede solucionarse programando cuidadosam<strong>en</strong>te: poner<br />

<strong>en</strong>tre paréntesis todo lo que esté definido d<strong>en</strong>tro de una macro. De todos modos el<br />

segundo problema es más sutil. Al contrario de una función normal, cada vez que<br />

usa argum<strong>en</strong>tos <strong>en</strong> una macro, dicho argum<strong>en</strong>to es evaluado. Mi<strong>en</strong>tras la macro sea<br />

llamada solo con variables corri<strong>en</strong>tes, esta evaluación es b<strong>en</strong>igna, pero si la evaluación<br />

de un argum<strong>en</strong>to ti<strong>en</strong>e efectos secundarios, <strong>en</strong>tonces los resultados pued<strong>en</strong> ser<br />

inesperados y definitivam<strong>en</strong>te no imitaran el comportami<strong>en</strong>to de una función.<br />

Por ejemplo, esta macro determina si un argum<strong>en</strong>to <strong>en</strong>tra d<strong>en</strong>tro de cierto rango:<br />

#define BAND(x) (((x)>5 && (x)5 && (x)

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

Saved successfully!

Ooh no, something went wrong!