MW211 EXIT

devlog
C言語/define定義の落とし穴
2012年10月18日
┌──────────────────────────────────────┐
│#define    A    2                                                           │
│B = A * 3;        → 2 * 3                → 「6」                          │
└──────────────────────────────────────┘
を想定したとして…。

define定義中で数式を使うのは注意が必要。
┌──────────────────────────────────────┐
│#define    A    1 + 1                                                       │
│B = A * 3;        → 1 + 1 * 3 → 1 + 3   → 「4」                          │
└──────────────────────────────────────┘
そのまま文字列置換のように展開されてしまうので、
加減剰余の優先度によっては意図しない結果となる。

よって、優先度の低い加減が絡む場合には括弧で囲った方がよいようだ
┌──────────────────────────────────────┐
│#define    A    (1 + 1)                                                     │
│B = A * 3;        → (1 + 1) * 3 → 2 * 3 → 「6」                          │
└──────────────────────────────────────┘
分類:C/C++