For preference I use the third style, with the exception of include guards, for which I use the second style.
I don't like the first style at all - I think of #define
as being a preprocessor instruction, even though really of course it isn't, it's a #
followed by the preprocessor instruction define
. But since I do think of it that way, it seems wrong to separate them. I expect text editors written by people who advocate that style will have a block indent/un-indent that works on code written in that style. But I would hate to encounter it using a text editor that didn't.
There's no point pandering to ancient preprocessors where the # has to be the first character of the line, unless you can also list off the top of your head all the other differences between those implementations and standard C, in order to avoid the other things you could possibly do that they would not support. Of course if you genuinely are working with a pre-standard compiler, fair enough.