believe it or not not all of us are pathetic teenagers...
Y'all right there pal?
For my part, code generation is fine. As with anything, it's how you use it, don't assume it knows what it's doing -- or that you know what you're doing, for that matter.
If in doubt, come up with a test to figure it out.
And never lose sight of what code is. It's for humans. (As unbelievable as that may sometimes seem for C...) Any random language will do for the machine, with whatever degree of translation might be necessary (whether trans/compiled, interpreted, emulated..). We choose to work in higher level languages, because it's easier, more powerful. So, what's the point? Use whatever is most accessible and familiar for anyone who may be reading your code. So if that means using mfg recommended tools, code generation and etc., probably use that. If a GNU or other free toolchain is reasonable enough, probably use that. The more you cook from scratch, the less familiar it will be to others, and the more important it is to be well written.
Which, mind
my audience, here -- if you're just getting started, or inexperienced, or tend to be a bit too clever for your own good -- pace yourself, tone it down, let the tools work for you. Make your intentions known, try to leave insightful comments (AND KEEP THEM SYNCED WITH THE CODE), don't prematurely optimize. CPU cycles are cheap, stick to easy-to-use, well-trodden platforms. If you're experienced, you write clear code, you're prepared to deal with less common, less well documented platforms -- by all means, rock on.
If you aren't writing for anyone -- just pet projects and such, maybe you don't even intend to publish it online or anything -- sure, anything goes, get experimental, no problem. Just don't burden others with spaghetti code and lacking comments.
Except when that's the point, in which case send it off to ioccc or whatever.
Tim