Output is some random integer
ab is integer but foo(a,b) is string string + integer = God knows
Thing is #define foo(a,b) #a
means you are converting argument a into string # here is stringify operator
e.g : if u write printf("%s",foo(ohyeah,b));
this will make a = ohyeah in #define foo(a,b) #a
and then #a = #ohyeah which means ohyeah is now a string which will replace foo(ohyeah,b)
I hope you got this if not lemme know :)