私は専門家ではないので、簡単に話してください。これら2つのコードセグメントに違いはありますか?
#define BIT3 (0x1
<
<
3)
static int a;
そして
#define BIT3 (0x1 << 3) static int a;
また、最初の行を1行で記述する方法はありますか?この複数行スタイルのポイントは何ですか?次のコードは良いですか?
#define BIT3 (0x1 << 3)
static int a;
複数行マクロは、非常に複雑なマクロがあり、それがすべて1行にある場合は読みにくい場合に役立ちます(ただし、非常に複雑なマクロを使用することはお勧めできません)。
一般に、行継続文字\
を使用して複数行の定義を記述できます。例えば.
#define MY_MACRO printf( \
"I like %d types of cheese\n", \
5 \
)
しかし、最初の例ではそれができません。そのようなトークンを分割することはできません。 <<
左シフト演算子は常に空白を分離せずに記述する必要があります。そうしないと、2つの小なり演算子として解釈されます。かもね:
#define BIT3 (0x1 \
<< \
3) \
static int a;
これは2番目の例と同等です。
[そのマクロがどのように役立つかはわかりませんが!]
例えば:
#define fact(f,n) for (f=1; (n); (n)--) \
f*=n;
行を\
文字で区切ることができます。マクロ固有ではないことに注意してください。長い行を改行したいときはいつでも、コードに\
文字を追加できます。
最初のものは動作しません。行はバックスラッシュTHEN改行で区切る必要があります。そのようです:
#define SOME_MACRO "whatever" \
"more" \
"yet more"