mp13.c

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

C
380
字号
#include "fail.h"

void link_time( int );
struct __ {
    __() {
	link_time( 0 );
    }
} __;

struct B {
    virtual void ack(){};
    virtual void jeff(){};
};
struct S : B {
    void foo(){};
    void bar(){};
};

typedef void ( S::* mp )( void );

struct ZZ {
    mp a,b,c;
};
ZZ _a = { &S::foo, S::foo, B::ack };
ZZ _b[] = {
    { &S::foo, S::ack, S::jeff },
    { &S::foo, S::ack, S::jeff },
    { &S::foo, S::ack, S::jeff },
    { &S::foo, S::ack, S::jeff },
    { &S::foo, S::ack, S::jeff },
    { &S::foo, S::ack, S::jeff },
};
mp _c = &S::foo;
mp _d[] = {
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
    S::foo,
    &S::bar,
    0,
    &B::ack,
    B::jeff,
};

int is_zero( void *p, unsigned s ) {
    char *q = (char*)p;
    while( s != 0 ) {
	if( *q ) {
	    return( 0 );
	}
	++q;
	--s;
    }
    return( 1 );
}

void link_time( int check ) {
    if( check != is_zero( &_a, sizeof(_a) ) ) _fail;
    if( check != is_zero( &_b, sizeof(_b) ) ) _fail;
    if( check != is_zero( &_c, sizeof(_c) ) ) _fail;
    if( check != is_zero( &_d, sizeof(_d) ) ) _fail;
}

int main() {
    link_time( 0 );
    _PASS;
}

⌨️ 快捷键说明

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