If you are translating some DSL to some generated C code (or something similar), look first at this and that answers.
I actually am doing the same within MELT, a Lispy domain specific language to extend the GCC compiler
You did not explain what kind of DSL are you thinking of, and how would the generated C code be used. Do you generate a standalone program, or some "plugin" or "library"?
A significant issue is memory management. You definitely should read about garbage collection (e.g. read the GC handbook).
Of course, translating some high-level domain specific language to C (or some other C-like language, or even any programming language which is lower-level than your DSL) is some form of compilation.
If you translated from a lower-level DSL to a higher-level language, you could read about decompilation and perhaps static binary analysis.
BTW, even for a "small DSL" and a simple C-like (or Pascal-like) target language, it is a lot of work (probably a year at least).
What generating some C-like language (with a good compiler implementation) brings you is that you might work less on optimization techniques inside your own compiler, with the realistic hope that the C (or Pascal, etc...) compiler you are generating code for would be able to optimize your generated code. You could also consider generating Gimple (with the new libgccjit from recent GCC) or LLVM or use some other JIT library (e.g. libjit).