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());
}