#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
Bu ise rolü nedir #ifdef
ve #ifndef
ve çıkış nedir?
#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
Bu ise rolü nedir #ifdef
ve #ifndef
ve çıkış nedir?
Yanıtlar:
Bir ifdef/endif
veya ifndef/endif
çiftin içindeki metin , duruma bağlı olarak ön işlemci tarafından bırakılacak veya kaldırılacaktır. ifdef
vası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ü one
tanımlandığı ifdef
için doğru ve ifndef
yanlış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, ifdef
kaldırılmadığı için sonraki metin one
tanımlanmıştır. Aynı sebepten sonraki metin ifndef
de kaldırılmıştır. Bir endif
noktada 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
Birisi soruda küçük bir tuzak olduğunu belirtmeli. #ifdef
yalnızca aşağıdaki sembolün #define
komut 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 #if
bu 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 defined
istenen davranışı elde etmeyi sağlar.
#if defined(one)
bu nedenle eşdeğerdir #ifdef
Yapının avantajı, #if
kod 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
"# 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.
Kod tuhaf görünüyor çünkü printf herhangi bir fonksiyon bloğunda değil.