c++cc-preprocessor

Should preprocessor instructions be on the beginning of a line?


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?


Solution

  • 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.