The following program will make you understand about ## (macro concatenation) operator clearly.
#include<stdio.h>
#define FUN(i, j) i##j
int main()
{
int First = 10;
int Second = 20;
char FirstSecond[] = "IndiaMax";
printf("%s\n", FUN(First, Second) );
return 0;
}
Output:
-------
IndiaMax
The preprocessor will replace FUN(First, Second) as FirstSecond.
Therefore, the printf("%s\n", FUN(First, Second) ); statement will become as printf("%s\n", FirstSecond );
Hence it prints IndiaMax as output.
Like the same, the line printf("%d\n", FUN(va1, 2)); given in the above question will become as printf("%d\n", va12 );.
Therefore, it prints 20 as output.