If I have the following code in foo.c
#define P(x) printf("%s\n", #x)
void main() {
P(3 == 4);
}
Invoking gcc -E foo.c will output:
int main() {
printf("%s\n", "3 == 4");
}
Notice that the # operator has stringified the literal for macro argument x. However, when I invoke /usr/bin/cpp, I get the following ... which is not expanded properly.
int main() {
printf("%s\n", #3 == 4);
}