Aracılığıyla paylaş


c ve C++ Microsoft uzantıları

Visual c++ gibi ANSI c ve c++ ANSI standartları genişletir.

Anahtar Sözcükler

Birkaç anahtar sözcükler eklenir. Listede C++ anahtar sözcükler, Visual c++ extensions iki lideri alt çizgi olan anahtar sözcüklerdir.

Static const Integral (veya numaralandırma) sınıf tanımı dışında üyeleri

Standart altında (/Za), aşağıda gösterildiği gibi veri üyesi için sınıf dışı tanımını yapmalısınız:

class CMyClass  {
   static const int max = 5;
   int m_array[max];
}
...
const int CMyClass::max;   // out of class definition

Altında /Ze, sınıf dışı tanımını statik, const tümleşik ve const numaralandırma veri üyeleri için isteğe bağlıdır. Sadece integraller ve statik ve const çeteleler başlatıcıları sınıfında olabilir; başlatılırken ifade, const deyimi olmalıdır.

Üstbilgide üstbilgi dosyası ve dosya dahil birden çok kaynak dosyada sağlanan sınıf giden tanım olduğunda hatalarından kaçınmak için kullanın a. Örne?in:

__declspec(selectany) const int CMyClass::max = 5;

Yayınları

Derleyici ANSI olmayan yayınları bu tür destekler:

  • M değerleri üretmek için ANSI olmayan yayınları. Örne?in:

    char *p;
    (( int * ) p )++;
    

    Not

    Bu uzantı yalnızca c dilinde kullanılabilir.Farklı bir türü için bir işaretçi gibi bir işaretçiyi değiştirmek için aşağıdaki ANSI c standart form c++ kodu kullanabilirsiniz.

    Önceki örnek aşağıdaki gibi standart ANSI c uyacak şekilde yazılması.

    p = ( char * )(( int * )p + 1 );
    
  • ANSI olmayan bir veri işaretçisi bir işlev işaretçisi, çevirir. Örne?in:

    int ( * pfunc ) (); 
    int *pdata;
    pdata = ( int * ) pfunc;
    

    Aynı tür dönüştürme gerçekleştirmek ve ayrıca ANSI uyumluluğu korumak için işlev işaretçisini çevirebilirsiniz bir uintptr_t önce bir veri işaretçisi dönüştürün:

    pdata = ( int * ) (uintptr_t) pfunc;
    

Değişken bağımsız değişken listesi

Derleyici, bunun yerine bir tür sağlayan bir işlev tanımı ve ardından bağımsız değişkenleri, değişken sayıda belirten bir işlev Bildiricisi destekler:

void myfunc( int x, ... );
void myfunc( int x, char * c )
{ }

Tek satırlı yorumlar

İki eğik çizgi kullanarak sunulan tek satırlı yorumlar, c derleyicisi destekler (/ /) karakteri:

// This is a single-line comment.

Kapsam

c derleyicisi aşağıdaki kapsamı ile ilgili özellikleri destekler.

  • Dış öğeleri statik olarak redefinitions:

    extern int clip();
    static int clip()
    {}
    
  • Aynı kapsam içinde zararsız typedef redefinitions kullan:

    typedef int INT;
    typedef int INT;
    
  • Bildirimciler işlevi dosya kapsam vardır:

    void func1()
    {
        extern int func2( double );
    }
    int main( void )
    {
        func2( 4 );    //  /Ze passes 4 as type double
    }                  //  /Za passes 4 as type int
    
  • Nonconstant ifadeler kullanılarak başlatılan blok kapsam değişkenleri kullanın:

    int clip( int );
    int bar( int );
    int main( void )
    {
        int array[2] = { clip( 2 ), bar( 4 ) };
    }
    int clip( int x )
    {
        return x;
    }
    int bar( int x )
    {
        return x;
    }
    

Veri bildirimlerine ve tanımları

c derleyicisi aşağıdaki veri tanımı ve bildirimi özelliklerini destekler.

  • Karışık karakter ve dize sabitleri başlatıcı olarak:

    char arr[5] = {'a', 'b', "cde"};
    
  • Temel türler dışında olan alanların bit unsigned int veya signed int.

  • Depolama sınıfı veya bir tür Bildirimciler:

    x;
    int main( void )
    {
        x = 1;
    }
    
  • Unsized diziler halinde son yapılar ve birleşimler:

    struct zero
    {
        char *c;
        int zarray[];
    };
    
  • Adsız (anonymous) yapıları:

    struct
    {
        int i;
        char *s;
    };
    
  • Adsız (anonymous) sendikalar:

    union
    {
        int i;
        float fl;
    };
    
  • Adlandırılmamış üyeleri:

    struct s
    {
       unsigned int flag : 1;
       unsigned int : 31;
    }
    

Kayan nokta iç işlevler

The compiler supports inline generation x86 Specific > of the atan, atan2, cos, exp, log, log10, sin, sqrt, and tan functions END x86 Specific when /Oi is specified. Bu yapı içleri kullanıldığında, ayarlı çünkü c için ANSI uyumluluk kaybolur errno değişkeni.

Bir Const işaretçi parametresi için bir başvuruyu bekler işleve Const işaretçi parametresi geçirerek

Bu c++ bir uzantısıdır. Bu kod ile derlenir /Ze:

typedef   int   T;

const T  acT = 9;      // A constant of type 'T'
const T* pcT = &acT;   // A pointer to a constant of type 'T'

void func2 ( const T*& rpcT )   // A reference to a pointer to a constant of type 'T'
{
   rpcT = pcT;
}

T*   pT;               // A pointer to a 'T'

void func ()
{
   func2 ( pT );      // Should be an error, but isn't detected
   *pT   = 7;         // Invalidly overwrites the constant 'acT'
}

ISO646.H etkin değil

Altında /Ze, aşağıdaki işleçleri metin biçimlerini kullanmak istiyorsanız, iso646.h dahil etmek zorunda:

  • & & (ve)

  • & = (and_eq)

  • & (bitand)

  • | (bitor)

  • ~ (komple konferans düzenlemesi)

  • ! (not)

  • ! = (not_eq)

  • || (veya)

  • | = (or_eq)

  • ^ (xor)

  • ^ (xor_eq) =

Dize hazır bilgi sahip türü const char [], değil const char oluştun [] adresi

Aşağıdaki örnek char baþlatýldýðýný altında const oluştun [4] /Za, ama char const [4] altında /Ze.

#include <stdio.h>
#include <typeinfo>

int main()
{
    printf_s("%s\n", typeid(&"abc").name());
}

Ayrıca bkz.

Başvuru

/ Za, /Ze (devre dışı bırak dil uzantıları)

Derleme Seçenekleri

Derleyici seçeneklerini ayarlama