bin ich auf der sicheren Seite.
ja, da die Klammer oberste Priorität hat wird damit vermieden,
dass die Addition ungewünscht durchgeführt wird.
Hallo Diether,
wenn schon, denn schon:
#define INDEX_B ((INDEX_A) + (SIZE_A))
Schließlich hast Du das Problem ja nach außen und innen. Einmal, weil Du nicht vom Kontext abhängig sein willst, in dem INDEX_B nach außen verwendet wird, noch wie die Bezeichner innen definiert sind.
Wenn man natürlich nur eigene Bezeichner verwendet, reicht es, die Klammern nur außen zu verwenden. Bei Variablen notwendig und grundsätzlich sicherer ist es natürlich beides zu tun, da daraus ja kein Nachteil entsteht - außer minimaler Verschlechterung der Lesbarkeit.
Ich würde es allerdings als Codierfehler ansehen, wenn jemand einen ungeklammerten Term als Ersatz und ungeklammerte Variablen verwendet.
Insgesamt gehört #define zu den Dingen, die man in C++ besser durch inline und const ersetzt. Denn spätestens beim In-/Dekrement knallt es trotz Klammer. Das sind dann die Fälle, in denen man tagelang nach Fehlern sucht. Was Compiler daraus machen ist nicht festgelegt:
#define ABS(x) (((x)>0)?(x)-(x)))
…
while (ABS(++i)
Ciao, Allesquatsch