A while ago I have discovered an (rather ancient) C Compiler, which scanned macros this way (Pseudo code):
if line.startswith("#include") or line.startswith("#define"):
...
.. Which kind of raised the question for me where macros should really be placed, at the beginning of a line, like so:
void stuff()
{
#if defined(WIN32) || defined(_WIN32)
...
#else
#if defined(__GNUC__)
...
#else
...
#endif
#endif
}
Or rather like so (as that's the way I do it, for improved readability):
void stuff()
{
#if defined(WIN32) || defined(_WIN32)
...
#else
# if defined(__GNUC__)
...
# else
...
# endif
#endif
}
Is the way one indents the Preprocessor code standardized, that is, no matter how i indent it, it will always work the same way?
Some old C compilers required that the #define
(for example) be flush with the left margin:
#define FOO bar
Other C compilers required only that the #
be at the left margin, so you could:
# define FOO bar
Newer C compilers tend to accept the #
after any leading whitespace:
#define FOO bar
If you want compatibility with such older compilers, you should at least put your #
in the first column. If compatibility doesn't matter, then it's up to you.
I would usually try not to embed #ifdef
blocks inside functions, so the whole question of whether they should be indented mostly goes away.