#İfdef ve #ifndef'in rolü


100
#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");

Bu ise rolü nedir #ifdefve #ifndefve çıkış nedir?

Yanıtlar:


131

Bir ifdef/endifveya ifndef/endif çiftin içindeki metin , duruma bağlı olarak ön işlemci tarafından bırakılacak veya kaldırılacaktır. ifdefvasıtaları ise "şu tanımlanması durumunda" ifndef"şu eğer araçlarla değil tanımlanan".

Yani:

#define one 0
#ifdef one
    printf("one is defined ");
#endif
#ifndef one
    printf("one is not defined ");
#endif

eşdeğerdir:

printf("one is defined ");

çünkü onetanımlandığı ifdefiçin doğru ve ifndefyanlıştır. Ne olarak tanımlandığı önemli değil . Buna benzer (bence daha iyi) bir kod parçası şöyle olacaktır:

#define one 0
#ifdef one
    printf("one is defined ");
#else
    printf("one is not defined ");
#endif

çünkü bu, bu özel durumda niyeti daha net belirtir.

Özel durumunuzda, ifdefkaldırılmadığı için sonraki metin onetanımlanmıştır. Aynı sebepten sonraki metin ifndef de kaldırılmıştır. Bir endifnoktada iki kapanış çizgisinin olması gerekecek ve ilki, aşağıdaki gibi satırların yeniden dahil edilmeye başlamasına neden olacaktır:

     #define one 0
+--- #ifdef one
|    printf("one is defined ");     // Everything in here is included.
| +- #ifndef one
| |  printf("one is not defined "); // Everything in here is excluded.
| |  :
| +- #endif
|    :                              // Everything in here is included again.
+--- #endif

68

Birisi soruda küçük bir tuzak olduğunu belirtmeli. #ifdefyalnızca aşağıdaki sembolün #definekomut satırı aracılığıyla mı yoksa komut satırı ile mi tanımlandığını kontrol eder , ancak değeri (aslında ikamesi) ilgisizdir. Yazabilirsin bile

#define one

ön derleyiciler bunu kabul eder. Ama kullanırsan #ifbu başka bir şey.

#define one 0
#if one
    printf("one evaluates to a truth ");
#endif
#if !one
    printf("one does not evaluate to truth ");
#endif

verecek one does not evaluate to truth. Anahtar kelime definedistenen davranışı elde etmeyi sağlar.

#if defined(one) 

bu nedenle eşdeğerdir #ifdef

Yapının avantajı, #ifkod yollarının daha iyi işlenmesine izin vermektir, eski #ifdef/ #ifndefçift ile böyle bir şey yapmaya çalışın .

#if defined(ORA_PROC) || defined(__GNUC) && __GNUC_VERSION > 300

0

"# if one", "#define one" yazıldıysa "# if one" çalıştırılırsa, aksi takdirde "#ifndef one" çalıştırılır anlamına gelir.

Bu sadece C Ön İşlemci (CPP) Direktifi if, then, else ifadelerinin C dilindeki dallanma ifadelerine eşdeğerdir.

ör. {# tanımla} ise printf ("biri doğru olarak değerlendirilir"); else printf ("biri tanımlı değil"); bu nedenle, #define bir ifade yoksa, ifadenin else dalı çalıştırılır.


4
Bunun, diğer yanıtların halihazırda kapsamadığını ve örneğinizin C veya C ++ olmadığını eklediğinden emin değilim.
SirGuy

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.