Home | Overview | How Do I | Compiler Options
The following are Microsoft extensions to the ANSI C standard:
The keywords __based, __cdecl, __declspec, __except, __fastcall, __finally, __leave, __stdcall, and __try are Microsoft-specific.
The Microsoft compiler supports the following two non-ANSI casts:
char *p;
(( int * ) p )++;
The preceding example could be rewritten to conform with the ANSI C standard as follows:
p = ( char * )(( int * )p + 1 );
int ( * pfunc ) ();
int *pdata;
pdata = ( int * ) pfunc;
To perform the same cast while maintaining ANSI compatibility, you must cast the function pointer to an int
before casting it to a data pointer:
pdata = ( int * ) (int) pfunc;
The Microsoft compiler supports use of a function declarator that specifies a variable number of arguments, followed by a function definition that provides a type instead:
void myfunc( int x, ... );
void myfunc( int x, char * c )
{ }
The Microsoft C compiler supports single-line comments, which are introduced with two forward slash (//) characters:
// This is a single-line comment.
The Microsoft C compiler supports the following scope-related features:
extern int clip();
static int clip()
{}
typedef int INT;
typedef int INT;
void func1()
{
extern int func2( double );
}
void main( void )
{
func2( 4 ); // /Ze passes 4 as type double
} // /Za passes 4 as type int
int clip( int );
int bar( int );
void main( void )
{
int array[2] = { clip( 2 ), bar( 4 ) };
}
int clip( int x )
{
return x;
}
int bar( int x )
{
return x;
}
The Microsoft C compiler supports the following data declaration and definition features:
char arr[5] = {'a', 'b', "cde"};
x;
void main( void )
{
x = 1;
}
struct zero
{
char *c;
int zarray[];
};
struct
{
int i;
char *s;
};
union
{
int i;
float fl;
};
struct s
{
unsigned int flag : 1;
unsigned int : 31;
}
The Microsoft compiler supports inline generation of the x86 Specific —> atan, atan2, cos, exp, log, log10, sin, sqrt, and tan functions END x86 Specific when the Generate Intrinsic Functions (/Oi) option is specified. For C, ANSI conformance is lost when these intrinsics are used, because they do not set the errno variable.