önişlemci 2
eşittir 1-0+1
genişler 1-A+1
genişler 1-B
için C
makro, genişler. Sıralı atama açısından düşünmeyin, ancak makro tanımları etrafında parantez ekleyerek istenen davranışı alabilirsiniz. Sonra C
makrosu, (1-B)
'a, sonra (1-(A+1))
'a ve 'a eşittir, bu da 0
'a eşittir.
Düzenleme: Örnek olarak
, FOO
17
eşit olduğunda BAR
FOO
"atandığı" olsa bile baskılar 42
aşağıdaki kod kesik. Bunun nedeni, genişlemenin gerçekte kullanılıncaya kadar ertelenmesidir. cout
satırında, BAR
hala FOO
'a eşittir, ancak bu noktada FOO
şimdi 17
değil 42
şeklindedir. İçinde ilk #undef
bulunmadan bir makroyu yeniden tanımlamanın kötü bir uygulama olduğunu unutmayın.
#define FOO 17
#define BAR FOO
#define FOO 42
cout << BAR << endl;
C -> "1-B" -> "1-A + 1" -> "1-0 + 1" = 2 –
1 gibi gitmez - (0 + 1) – kyrpav
Parantezleri makrolara eklemeniz gerekir. –