the attached C program will fail to be preprocessed by cpp(1) with the following output. for comparison, the gcc -E test.c output follows as well. this specific example was extracted from tinycc. 9front cpp(1): term% cpp concat.c cpp: concat.c:8 Bad token jo) produced by ## cpp: concat.c:8 No newline at end of file cpp: concat.c:8 EOF in macro arglist cpp: concat.c:8 Disagreement in number of macro arguments #line 1 "/usr/glenda/code/c/trash/concat.c" #line 4 "/usr/glenda/code/c/trash/concat.c" enum token { TOK_NULL DEF_ASM(jo #undef DEF};static const char keywords[] = #define DEF(id, str) str "\0" DEF_ASMTEST(j,)#undef DEF;int main(int argc, char *argv[]){ return -1;}#line 23 "/usr/glenda/code/c/trash/concat.c" gcc -E: mischief@omicron:/tmp $ gcc -E concat.c # 1 "concat.c" # 1 "" # 1 "" # 31 "" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 32 "" 2 # 1 "concat.c" enum token { TOK_NULL ,TOK_ASM_jo }; static const char keywords[] = "jo" "\0" ; int main(int argc, char *argv[]) { return 0; }