Nim officially comes with a limited set of backend C compilers. In nimbase.h, a large amount of '#if's are introduced to handle backends' differences in features and syntax. That makes it difficult to maintain, and also it's not easy for end users to use their favorite or new C compilers not in the official set as Nim's backend.
I suggest that maybe Nim can move all the compiler-specific thing into stand-alone header files, e.g cc_gcc.h, cc_msc.h, cc_tcc.h, etc. The compiler-specific header files will include Nim's generic type defines, macro definitions, etc. When Nim is invoked by --cc=xxx, then the generated .c files will include cc_xxx.h before the nimbase.h.
In this way, the nimbase.h and the compiler-specific headers are all easier to maintain, and the end users can also easily add new backend compiler: just add new entries with compiler shortname (e.g awesomecc), path, compiling parameters, linking parameters in the nim.cfg, and implement a cc_awsomecc.h for Nim's types, macros, bla bla...