⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parm09.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
字号:
#include <stdarg.h>
#include "fail.h"

#pragma inline_depth 0

struct F {
    static int count;
    int f;
    F( int f ) : f(f) {
	//printf( "F(%p,%d)\n", this, f );
	++count;
    }
    F( F const &s ) : f(s.f) {
	//printf( "F(%p,%p)\n", this, &s );
	++count;
    }
    ~F() {
	//printf( "~F(%p)\n", this );
	--count;
	if( count < 0 ) fail(__LINE__);
    }
};

int F::count;

void test( int n, ... )
{
    va_list args;

    va_start( args, n );
    va_end( args );
}

struct C1 {
    static int count;
    int x,y,z;
    C1( F x, F y, F z ) : x(x.f), y(y.f), z(z.f) {
	//printf( "C1(%p,%d,%d,%d)\n", this, x, y, z );
	test( 3, x, y, z );
	++count;
    }
    C1( C1 const &s ) : x(s.x), y(s.y), z(s.z) {
	//printf( "C1(%p,%p)\n", this, &s );
	++count;
    }
    ~C1() {
	//printf( "~C1(%p)\n", this );
	--count;
	if( count < 0 ) fail(__LINE__);
    }
};

int C1::count;

void bad() {
    auto C1 x( F(1), F(2), F(3) );
    auto C1 y( F(1), F(2), F(3) );
}

int main() {
    try {
	bad();
    } catch( ... ) {
	fail(__LINE__);
    }
    if( F::count != 0 ) fail(__LINE__);
    if( C1::count != 0 ) fail(__LINE__);
    _PASS;
}

⌨️ 快捷键说明

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