Indenting #defines

后端 未结 9 2050
伪装坚强ぢ
伪装坚强ぢ 2020-11-30 00:34

I know that #defines, etc. are normally never indented. Why?

I\'m working in some code at the moment which has a horrible mixture of #define

相关标签:
9条回答
  • 2020-11-30 01:00

    Pre-ANSI C preprocessor did not allow for space between the start of a line and the "#" character; the leading "#" had to always be placed in the first column.

    Pre-ANSI C compilers are non-existent these days. Use which ever style (space before "#" or space between "#" and the identifier) you prefer.

    http://www.delorie.com/gnu/docs/gcc/cpp_48.html

    0 讨论(0)
  • 2020-11-30 01:00

    As some have already said, some Pre-ANSI compilers required the # to be the first char on the line but they didn't require de preprocessor directive to be attached to it, so indentation was made this way.

    #ifdef SDCC
    #  if DEBUGGING == 1
    #    if defined (pic18f2480)
    #      define FLASH_MEMORY_END 0x3DC0
    #    elif defined (pic18f2580)
    #      define FLASH_MEMORY_END 0x7DC0
    #    else
    #      error "Can't set  up flash memory end!"
    #    endif
    #  else
    #    if defined (pic18f2480)
    #      define FLASH_MEMORY_END 0x4000
    #    elif defined (pic18f2580)
    #      define FLASH_MEMORY_END 0x8000
    #    else
    #      error "Can't set  up flash memory end!"
    #    endif
    #  endif
    #else
    #  if DEBUGGING == 1
    #    define FLASH_MEMORY_END 0x7DC0
    #  else
    #    define FLASH_MEMORY_END 0x8000
    #  endif
    #endif
    

    I've often seen this style in old Unix headers but I hate it as the syntax coloring often fails on such code. I use a very visible color for pre-processor directive so that they stand out (they are at a meta-level so should not be part of the normal flow of code). You can even see that SO does not color the sequence in a useful manner.

    0 讨论(0)
  • 2020-11-30 01:01

    I know this is old topic but I wasted couple of days searching for solution. I agree with initial post that intending makes code cleaner if you have lots of them (in my case I use directives to enable/disable verbose logging). Finally, I found solution here which works Visual Studio 2017

    If you like to indent #pragma expressions, you can enable it under: Tools > Options > Text Editor > C/C++ > Formatting > Indentation > Position of preprocessor directives > Leave indented

    The only problem left is that auto code layout fixed that formatting =(

    0 讨论(0)
提交回复
热议问题