Token Pasting (##)
combine two different tokens into single token in macro definition
Example
#include <stdio.h>
#define tokenpaster(n) printf ("token" #n " = %d", token##n)
int main(void)
{
int token34 = 40;
tokenpaster(34);
return 0;
}
output:
token34=40
#include <stdio.h>
#define merge(a, b) a##b
int main()
{
printf("%d ", merge(12, 34));
}
// Output: 1234
// here if you use sprintf then that it can be used for another purpose
Stringize (#)
- converts the macro parameters into string constant
- A token passed to macro can be converted to a sting literal by using # before it.
#include <stdio.h>
#define message_for(a, b) \
printf(#a " and " #b ": We love you!\n")
int main(void)
{
message_for(Carole, Debra);
return 0;
}
output:
Carole and Debra: We love you!
Purpose of using do-while in the multiline macro:
#define just do the copy and not doing any evaluations:
- at first look it gives output like 1 but see carefully
example:
#define square(x) x*xintmain(){intx = 36/square(6);// Expended as 36/6*6printf("%d", x);return0;}// Output: 36
#include <stdio.h>#define MULTIPLY(a, b) a*bintmain(){// The macro is expended as 2 + 3 * 3 + 5, not as 5*8printf("%d", MULTIPLY(2+3, 3+5));return0;}// Output: 16
to know interesting fact about macro please refer:http://www.geeksforgeeks.org/interesting-facts-preprocessors-c/
Reference:
http://www.tutorialspoint.com/cprogramming/c_recursion.htm
No comments:
Post a Comment