/* Program ilustruje C pretrpocesor - direktiva #define */

#include <stdio.h>

/* Simbolicka konstanta */
#define BROJ 3

/* Kvadrat broja - ne radi u svim slucajevima */
#define square1(a) a*a

/* Kvadrat broja - ispravljena verzija */
#define square2(a) ((a)*(a))

/* Do problema dolazi jer C pretprocesor doslovno vrsi zamene -  
   pogledati obavezno program nakon faze pretprocesiranja: gcc -E 0.9.c
*/

int main() {
	printf("BROJ: %d\n", BROJ);
	printf("square1(3): %d\n", square1(3));
	printf("square1(3+2): %d\n", square1(3+2));
	printf("square2(3+2): %d\n", square2(3+2));
}