previous next Up Title Contents Index

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!

Tehtävä 17.153 Makron yllätykset

Keksi muita esimerkkejä missä K_2 - makron käyttö tuottaisi yllätyksiä.


previous next Up Title Contents Index