dtor18.c

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

C
96
字号
#include "fail.h"

int count;

struct C {
    C(int);
    ~C();
};

C::C(int) {
    ++count;
}
C::~C() {
    --count;
    if( count < 0 ) fail(__LINE__);
}

int o1( int v1, int v2 )
{
    return (C(v1),v1)||(C(v2),v2);
}
int o2( int v1, int v2 )
{
    return (C(v1),v1)||(v2);
}
int o3( int v1, int v2 )
{
    return (v1)||(C(v2),v2);
}

int a1( int v1, int v2 )
{
    return (C(v1),v1)&&(C(v2),v2);
}
int a2( int v1, int v2 )
{
    return (C(v1),v1)&&(v2);
}
int a3( int v1, int v2 )
{
    return (v1)&&(C(v2),v2);
}

int main()
{
    if( o1( 0, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o1( 1, 0 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o1( 0, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o1( 1, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o2( 0, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o2( 1, 0 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o2( 0, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o2( 1, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o3( 0, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o3( 1, 0 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o3( 0, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( o3( 1, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a1( 0, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a1( 1, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a1( 0, 1 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a1( 1, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a2( 0, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a2( 1, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a2( 0, 1 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a2( 1, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a3( 0, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a3( 1, 0 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a3( 0, 1 ) != 0 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    if( a3( 1, 1 ) != 1 ) fail(__LINE__);
    if( count != 0 ) { count = 0; fail(__LINE__); }
    _PASS;
}

⌨️ 快捷键说明

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