17.4.2 Ole kuitenkin varovainen
Makrot ovat kuitenkin hyvin vaarallisia huolimattomasti käytettynä:
#define K_2(i) (i + i)
...
a = K_2(4); - > a = (4 + 4);
a = K_2(n++); - > a = (n++ + n++); /* !!!!!!!!!! */
Onneksi C++:ssa ei enää tarvita niin paljon parametrillisia
makroja kuin puhtaassa C:ssä. Sama asia voidaan useimmiten hoitaa
inline-
funktiolla:
inline int k_2(int i) { return (i + i); }
...
a = k_2(4); - > a = 8;
a = k_2(n++); - > a = 2*n; n++; // Toimii oikein!
- Keksi muita esimerkkejä missä K_2 - makron
käyttö tuottaisi yllätyksiä.