Multi-line DEFINE directives?

后端 未结 3 798
隐瞒了意图╮
隐瞒了意图╮ 2020-12-13 08:40

I am not an expert, so go easy on me. Are there any differences between these two code segments?

#define BIT3 (0x1
<
<
3)
static int a;
相关标签:
3条回答
  • 2020-12-13 08:47

    For example:

    #define fact(f,n)   for (f=1; (n); (n)--) \
                          f*=n;
    

    You can separate the lines with the \ character. Note that it is not macro specific. You can add the \ character in your code whenever you would like to break a long line.

    0 讨论(0)
  • 2020-12-13 08:55

    A multi-line macro is useful if you have a very complex macro which would be difficult to read if it were all on one line (although it's inadvisable to have very complex macros).

    In general, you can write a multi-line define using the line-continuation character, \. So e.g.

    #define MY_MACRO    printf( \
        "I like %d types of cheese\n", \
        5 \
        )
    

    But you cannot do that with your first example. You cannot split tokens like that; the << left-shift operator must always be written without any separating whitespace, otherwise it would be interpreted as two less-than operators. So maybe:

    #define BIT3 (0x1 \
        << \
        3) \
        static int a;
    

    which is now equivalent to your second example.

    [Although I'm not sure how that macro would ever be useful!]

    0 讨论(0)
  • 2020-12-13 09:11

    The first one should not work. Lines should be separated with backslash THEN newline. Like so:

    #define SOME_MACRO "whatever" \
    "more" \
    "yet more"
    
    0 讨论(0)
提交回复
热议问题