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;
In general, you can write a multi-line define using the line-continuation character, \ .
The #define creates a macro, which is the association of an identifier or parameterized identifier with a token string. After the macro is defined, the compiler can substitute the token string for each occurrence of the identifier in the source file.
We can write multiline macros like functions, but for macros, each line must be terminated with backslash '\' character. If we use curly braces '{}' and the macros is ended with '}', then it may generate some error. So we can enclose the entire thing into parenthesis.
The #define directive is used to define values or macros that are used by the preprocessor to manipulate the program source code before it is compiled. Because preprocessor definitions are substituted before the compiler acts on the source code, any errors that are introduced by #define are difficult to trace.
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!]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With