cond1.c

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

C
82
字号
#include "fail.h"

int Ac = 0, Ad = 0;
int Bc = 0, Bd = 0;

class A {
public:
    A( bool b )
        : b ( b )
    { Ac++; }

    operator bool() { return b; }

    ~A() { Ad++; }

private:
    bool b;
};

class B {
public:
    B( int i )
        : i ( i )
    { Bc++; }

    operator int() { return i; }

    ~B() { Bd++; }

private:
    int i;
};

int main()
{
    for( int i = 0; i < 2; i++ ) {
        if( A a = ( i == 0 ) ) {
            bool b = a;
            if( ! b ) fail( __LINE__ );
            if( i != 0 ) fail( __LINE__ );
            if( Ac != ( Ad + 1 ) ) fail( __LINE__ );
        } else {
            bool b = a;
            if( b ) fail( __LINE__ );
            if( i == 0 ) fail( __LINE__ );
            if( Ac != ( Ad + 1 ) ) fail( __LINE__ );
        }
        if( ! ( Ac == ( 2*i + 1 ) && Ad == ( 2*i + 1) ) ) fail( __LINE__ );

        if( A a = ( i != 0 ) ) {
            bool b = a;
            if( ! b ) fail( __LINE__ );
            if( i == 0 ) fail( __LINE__ );
            if( Ac != ( Ad + 1 ) ) fail( __LINE__ );
        } else {
            bool b = a;
            if( b ) fail( __LINE__ );
            if( i != 0 ) fail( __LINE__ );
            if( Ac != ( Ad + 1 ) ) fail( __LINE__ );
        }
        if( ! ( Ac == ( 2*i + 2 ) && Ad == ( 2*i + 2) ) ) fail( __LINE__ );
        int a = 0;

        switch( B b = i ) {
        case 0:
            if( b != 0 ) fail( __LINE__ );
            if( Bc != ( Bd + 1 ) ) fail( __LINE__ );
            break;

        case 1:
            if( b != 1 ) fail( __LINE__ );
            if( Bc != ( Bd + 1 ) ) fail( __LINE__ );
            break;
        }
        int b = 0;

        if( ! ( Bc == ( i + 1 ) && Bd == (i + 1 ) ) ) fail( __LINE__ );
    }

    _PASS;
}

⌨️ 快捷键说明

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