GCC seems like to always expand tabs in source code by spaces. It preserve space that are inside the expression. What does the standard says about it?
For example, what will c contains in this example (<TAB> represent a litteral \t character in source code file).
#define X(a) #a
const char* c = X(<TAB>a<TAB>c<TAB>);
// c == "a c" ? (looks like what gcc does)
// c == "a\tc" ?