2013-08-14 23 views
6

Bu kod neden derlenmiyor? Eğer doğru anladım eğer bu derler. Neredeyim? önişlemciÖnişlemci yönergelerini anlama

#if THREADMODEL==NOASC 

yorumladığı zaman

#define THREADMODEL ASC 

#if THREADMODEL==NOASC 
THIS BLOCK SHOULDN'T BE COMPILED 
#endif 

int main() { 
} 

cevap

13

o ASC ile THREADMODEL yerini alacak:

#if ASC==NOASC 

sayısal değerlerine sahip #define d ASC ve NOASC yoksa, önişlemci onları yerini alacak 0 değeriyle (tanımlanmamış semboller alır ve bunları 0 ile değiştirir):

#if 0==0 

Bu, 1 olarak değerlendirilir ve böylece önişlemci bloğu değerlendirir. Bunu düzeltmek için

, bu gibi ASC ve NOASC farklı sayısal değerler vererek deneyin: Bu yardımcı olur

#define ASC 0 
#define NOASC (1 + (ASC)) 

Umut!

+0

Çok teşekkürler! Mükemmel cevap! –

+0

İfadelere genişleyen makro tanımlarını tam olarak parantez içine almak en iyisidir: #define NOASC (1 + ASC) –

+0

@KeithThompson İyi yakalama - ASC'yi parantezlemek için hatırladım, ancak ortaya çıkan ifade değil. – templatetypedef