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;
and
#define BIT3 (0x1 << 3) static int a;
Also, is there a way to write the first in one line? What is the point of this multi-line style? Is the following code good?
#define BIT3 (0x1 << 3)
static int a;
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 eg
#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!]
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.
The first one should not work. Lines should be separated with backslash THEN newline. Like so:
#define SOME_MACRO "whatever" \
"more" \
"yet more"
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.