addr01.c

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

C
50
字号
#include "fail.h"

struct S {
    static int sfn( int, int );
};

int S::sfn( int x, int y )
{
    return x * 3 + y * 2;
}

struct A {
    S m;
};

struct B : S {
};

struct D : B {
};

struct VD : virtual A {
};

int main()
{
    auto int (*fn)( int, int );
    S s;
    A a;
    B b;
    D d;
    VD vd;

    fn = S::sfn;
    if( fn( 1, 2 ) != 7 ) fail(__LINE__);
    fn = &S::sfn;
    if( fn( 1, 2 ) != 7 ) fail(__LINE__);
    fn = s.sfn;
    if( fn( 1, 2 ) != 7 ) fail(__LINE__);
    fn = a.m.sfn;
    if( fn( 1, 2 ) != 7 ) fail(__LINE__);
    fn = b.sfn;
    if( fn( 1, 2 ) != 7 ) fail(__LINE__);
    fn = d.sfn;
    if( fn( 1, 2 ) != 7 ) fail(__LINE__);
    fn = vd.m.sfn;
    if( fn( 1, 2 ) != 7 ) fail(__LINE__);
    _PASS;
}

⌨️ 快捷键说明

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