Reputation: 67291
I have a C program below:
#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}
when I run just the preprocessor it expands this as
{
int var12=100;
printf("%d",var12);
}
which is the reason why the output is 100.
Can anybody tell me how/why the preprocessor expands var##12 to var12
?
Upvotes: 17
Views: 25767
Reputation: 70775
Nothing too fancy: ##
tells the preprocessor to concatenate the left and right sides.
See here.
Upvotes: 37
Reputation: 31
#define f(g,g2) g##g2
## is usued to concatenate two macros in c-preprocessor. So before compiling f(var,12) should replace by the preprocessor with var12 and hence you got the output.
Upvotes: 2
Reputation: 143925
because ## is a token concatenation operator for the c preprocessor.
Or maybe I don't understand the question.
Upvotes: 6
Reputation: 92924
##
is Token Pasting Operator
The double-number-sign or "token-pasting" operator (##), which is sometimes called the "merging" operator, is used in both object-like and function-like macros. It permits separate tokens to be joined into a single token and therefore cannot be the first or last token in the macro definition.
If a formal parameter in a macro definition is preceded or followed by the token-pasting operator, the formal parameter is immediately replaced by the unexpanded actual argument. Macro expansion is not performed on the argument prior to replacement.
Upvotes: 6