diag0228.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 85 行

C
85
字号
// BADDTOR.C -- CHECK ERROR CASES OF CHAPTER 8, DECLATORS IN C++ Ref
//
// 91/10/29	-- Ian McHardy		-- defined

class with_static_a{ public: static int a; };

#define PTR_TO_MEMBER		// pointer to members implemented

void main( void )
{

// 8.2
    int ok_int,			// OK
        ok_int2,		// OK
        auto bad_auto_i;	// cannot int <qualifier>
    int	static bad_static_i;	// ditto
    int	extern bad_extern_i;	// ditto
    int	register bad_register_i;	// ditto
    int	friend bad_friend_i;	// ditto
    int	inline bad_inline_i( void );	// ditto
    int	virtual bad_virtual_i( void );	// ditto
    int	typedef bad_typedef_i;	// ditto

// 8.2.1
    const ci = 10, *pc = &ci, *const cpc = pc;	// OK
    int i, *p, *const cp = &i;	// OK

    ci = 1;			// modifying a constant value
    ci++;			// ditto
    *pc = 2;			// ditto
    cp = &ci;			// ditto
    cpc++;			// ditto
    p = pc;			// ditto

#ifdef PTR_TO_MEMBER
// 8.2.3
    with_static_a wsa;		// OK
    with_static_a *wsap;
    int with_static_a::*pmi;

    pmi = &with_static_a::a;	// cannot point to static member
    wsa.*pmi = 7;		// cannot access a static member
    wsap = &wsa;		// OK
    was->*pmi = 8;		// cannot access a static member
#endif

// 8.2.4

    double bad_doub_array[ 0 ];	// must have subscript > 0
    char * bad_char_ptr_2d[ 12 ][ -1 ][ 7 ];	// must have subscript > 0
    void bad_void_array[ 3 ];	// cannot have array of void

// 8.2.5
    typedef int function( int a );// OK
    function funct_array[ 5 ];	// cannot have an array of functions
}

typedef char char_array[ 5 ];	// OK

char_array bad_funct1()		// test for 8.2.5: cannot return array
{
    char_array a;
    a[ 3 ] = 3;
    return( a );		// cannot return array
}

typedef int function( int a ); 	// OK

function bad_funct2()		// test for 8.2.5: cannot return function
{
    return( int b( int a ){ return( a ); }; );// cannot return function
}

void bad_funct3( struct S{ int a, b; }arg ) // test for 8.2.5: types may not
{
    arg = arg;			// be defined as argument types
}

enum E{ A, B, C }bad_funct4()	// test for 8.2.5: ditto
{
    return A;			// ditto
}

void good_function( int ){};	// should be legal (8.2.5)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?