Macro example

#define  PERIMETER(x)  (x + x + x + x)
int perimeter(int);

int main()
{
  int size = 4, size1 = 4, answer, answer1;

  answer = PERIMETER(size);
  answer1 = perimeter(size1);
printf("\n1 - %d, %d function call - %d %d", size, answer, size1, answer1);

  size = 4;
  size1 = 4;
  answer = PERIMETER(size + 1);
  answer2 = perimeter(size1 + 1);
printf("\n2 - %d, %d function call - %d %d", size, answer, size1, answer1);

  size = 4;
  size1 = 4;
  answer = PERIMETER(size++);
  answer2 = perimeter(size1++);
printf("\n3 - %d, %d function call - %d %d", size, answer, size1, answer1);

  size = 4;
  size1= 4;
  answer = PERIMETER(--size);
  answer2 = perimeter(--size1);

printf("\n4 - %d, %d function call - %d %d", size, answer, size1, answer1);

  size = 4;
  size1 = 4;
  answer = (--size) + (--size) + (--size) + (--size);

printf("\n5 - %d, %d", size, answer);

  return (0);
}


int perimeter(int size)
{
   return(size + size + size + size);
}

Output:
1 - 4, 16 function call - 4 16
2 - 4, 20 function call - 4 20
3 - 9, 16 function call - 5 16
4 - 0, 6 function call - 3 12
5 - 0, 6