Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

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 parametrillisiä 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.152 Makron yllätykset

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

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys