Aracılığıyla paylaş


kapsamında olan, #elif ve başka # # endif yönergeleri (c/C++)

#if Yönergesi ile #elif, #else, ve #endif yönergeleri, kaynak dosyanın bölümlerini derlemesini denetler.Deyimi yazarsanız (sonra #if) hemen ardından satır grubu sıfır dışında bir değere sahip #if yönergesi çeviri biriminde tutulur.

Dilbilgisi

  • Koşullu :
    Eğer parça parça elifkabulbölümü başkakabulENDIF satırı

  • Eğer parça :
    Eğer satır metin

  • Eğer satır :
    # if sabit ifade

    #ifdef tanımlayıcısı

    #ifndef tanımlayıcısı

  • elif bölümleri :
    elif satırlı metin

    elif bölümleri elif satırlı metin

  • elif satır :
    #elif sabit ifade

  • Bölümü başka :
    başka satır metin

  • Satır başka :
    #else

  • satır içi ENDIF :
    #endif

Her #if tarafından bir kapanış yönergesi kaynak dosyadaki eşleşen #endif yönergesi.Herhangi bir sayıda #elif yönergeleri arasında görünen #if ve #endif yönergeleri, ancak en çok bir #else yönergesi izin verilir.#else Yönergesi, varsa olmalıdır önce son yönergesi #endif.

#if, #elif, #else, Ve #endif yönergeleri diğer metin bölümleri iç içe #if yönergeleri.Her iç içe #else, #elif, veya #endif yönergesi ait en yakın takip için #if yönergesi.

Tüm koşullu derleme yönergeleri gibi #if ve #ifdef, kapanış ile eşlenmesi gereken #endif yönergeleri için önce dosya sonuna; Aksi durumda, bir hata iletisi oluşturulur.Koşullu derleme yönergeleri dahil dosyalarının içerdiği zaman, aynı koşulları karşılayan gerekir: eşleşmeyen hiçbir koşullu derleme yönergeleri içeren dosyanın sonunda olmalıdır.

Makroyu değiştirme izleyen komut satırı bölümü içinde gerçekleştirilen bir #elif makro çağrısı olarak kullanılabilmesi için komut sabit ifade.

Önişlemci verilen örnekleri seçer metin diğer işlemler.Belirtilen bir blok metin herhangi bir metin dizisi olabilir.Bu, birden fazla satır kaplayabilir.Genellikle metin derleyici veya Önişlemci anlamı olan program metindir.

Önişlemci seçilen işler metin ve derleyici geçirir.Metin Önişlemci yönergeleri, bu yönergeleri Önişlemci tıklatıldığındaki içerir.Önişlemci tarafından seçilen metin bloklarını derlenir.

Tek bir Önişlemci seçer metin her izleyen sabit ifadenin değeri hesaplanırken tarafından madde #if veya #elif true (sıfırdan farklı) sabit ifade bulana kadar yönergesi.Tüm metni seçer (başlayarak diğer Önişlemci yönergeleri de dahil olmak üzere #), ilişkili kadar #elif, #else, veya #endif.

Tüm tekrarlamalarını sabit ifade yanlışsa, ya da yok, #elif yönergeleri görüntülenmiyorsa, metin bloğunun ardına Önişlemci seçer #else yan tümcesi.#else Yan tümcesi atlanırsa ve tüm örneklerini sabit ifade de #if blok yanlış, hiçbir metin bloğu seçilir.

Sabit ifade bu ek kısıtlamalar içeren bir tamsayı sabit ifade edilir:

  • İfadeler tamsayı türü olmalıdır ve karakter sabitler yalnızca tamsayı sabitleri içerebilir ve tanımlanan işleci.

  • İfade kullanamazsınız sizeof ya da bir tür atama işlecinin.

  • Hedef ortam tamsayılar tüm aralıkları temsil etmek mümkün olmayabilir.

  • Çeviri türünü temsil eden int türü ile aynı uzun, ve unsigned int aynı unsigned long.

  • Çevirici kod değerleri hedef ortam kümesinden farklı bir dizi karakter sabitler çevirebilirsiniz.Hedef ortam özelliklerini belirlemek için SINIRLARI makrolarını değerlerini denetleyin.H hedef ortamı için oluşturulmuş bir uygulamada.

  • İfade herhangi bir çevresel sorguları gerçekleştirmemelisiniz ve hedef bilgisayardaki uygulama ayrıntılarını gelen insulated kalmalıdır.

Önişlemci işleç tanımlanan tarafından aşağıdaki sözdizimini gösterildiği gibi özel sabit ifadelerde kullanılabilir:

defined( identifier )

tanımlananidentifier

Bu sabit ifade, true (sıfırdan farklı) ise değerlendirilir tanımlayıcısı şu anda tanımlanır; Aksi halde, koşul yanlış olduğunda (0).Boş metin olarak kabul edilir olarak tanımlanan bir tanımlayıcısı tanımlı.Tanımlanan yönergesi kullanılabilir bir #if ve bir #elif yönergesi, ancak endüstride başka hiçbir yerde.

Aşağıdaki örnekte, #if ve #endif kontrol üç işlev çağrıları birinin derleme yönergeleri:

#if defined(CREDIT)
    credit();
#elif defined(DEBIT)
    debit();
#else
    printerror();
#endif

İşlev çağrısı credit , derlenmiş bir tanımlayıcı CREDIT tanımlanır.Tanımlayıcı DEBIT tanımlanır, işlev çağrısı debit derlenir.Hiçbiri tanımlayıcısı tanımlı ise, çağrı printerror derlenir.Dikkat CREDIT ve credit taleplerini farklı olduğu için ayrı c ve C++ tanımlayıcılardır.

Aşağıdaki örnekte koşullu derleme ifadeleri adlı önceden tanımlanmış bir sembolik sabit kabul DLEVEL.

#if DLEVEL > 5
    #define SIGNAL  1
    #if STACKUSE == 1
        #define STACK   200
    #else
        #define STACK   100
    #endif
#else
    #define SIGNAL  0
    #if STACKUSE == 1
        #define STACK   100
    #else
        #define STACK   50
    #endif
#endif
#if DLEVEL == 0
    #define STACK 0
#elif DLEVEL == 1
    #define STACK 100
#elif DLEVEL > 5
    display( debugptr );
#else
    #define STACK 200
#endif

İlk #if blok gösterir iki adet iç içe #if, #else, ve #endif yönergeleri.İlk yönergeleri kümesi yalnızca işlenen DLEVEL > 5 doğrudur.Aksi halde, ifadelerden hemen sonra #başka işlenir.

#elif Ve #else İkinci örnekte yönergeleri değere göre dört seçimlerden birini yapmak için kullanılan DLEVEL.Sabit STACK 0, 100 ya da 200, tanımına göre ayarlamak DLEVEL.DLEVEL 5, Sonra deyimi büyük

#elif DLEVEL > 5
display(debugptr);

derlenen ve STACK tanımlı değil.

Koşullu derleme için yaygın bir kullanımı, aynı üstbilgi dosyası birden çok içermeler engellemektir.Sınıflar genellikle üstbilgi dosyaları tanımlandığı, C++'da, aşağıdaki gibi yapıları birden çok tanımı engellemek için kullanılabilir:

/*  EXAMPLE.H - Example header file  */
#if !defined( EXAMPLE_H )
#define EXAMPLE_H

class Example
{
...
};

#endif // !defined( EXAMPLE_H )

Yukarıdaki kod bakar sembolik sabit EXAMPLE_H tanımlanır.Bu durumda, dosya zaten eklenmiştir ve Unattend.txt yok.Yoksa, sabit, EXAMPLE_H örnek olarak işaretlemek için tanımlanır.H olarak işlenmiş.

Ayrıca bkz.

Başvuru

Önişlemci yönergeleri