Monday, 13 April 2015

Write a C macro PRINT(x) which prints x , where x can be of any data type (string or char or int etc..)


At the first look, it seems that writing a C macro which prints its argument is very easy  Following program should work i.e. it should print x

#include<stdio.h>
#define PRINT(x) printf("%s",(x));
main()
{
PRINT(x);
}

OR

#include<stdio.h>
#define PRINT(x) (x)
int main()
  printf("%s",PRINT(x));
  return 0;
}


But it would issue compile error because the data type of x, which is taken as variable by the compiler, is unknown. Now it doesn’t look so obvious. Isn’t it? 

Guess what, the followings also won’t work
#define PRINT(x) ('x')
#define PRINT(x) ("x")

magic of Stringizing Operator

But if we know one of lesser known traits of C language, writing such a macro is really simple. In C, there’s a # directive, also called ‘Stringizing Operator’, which does this magic. Basically # directive converts its argument in a string. Voila! it is so simple to do the rest. So the above program can be modified as below.


#include<stdio.h>
#define PRINT(x) printf("%s",(x));
main()
{
PRINT(x);
}

OR 

#include<stdio.h>
#define PRINT(x) (#x)
int main()
  printf("%s",PRINT(x));
  return 0;
}
or 

Now if the input is PRINT(x), it will print x and PRINT(aravind) will print aravind

No comments:

Post a Comment