声明与#34; MyStuct a();"之间有什么区别?和#34; MyStruct a;"?

时间:2015-11-01 09:49:24

标签: d

该程序编译并链接:

struct A{
    int m;
}

void main()
{
    A a;
    int x = a.m;
}

虽然这不是:

struct A{
    int m;
}

void main()
{
    A a();
    int x = a.m;
}

$dmd app.d返回:

app.o: In function `_Dmain':
app.d:(.text._Dmain+0xb): undefined reference to `_D3app4mainFZ1aMFZS3app1A'
collect2: error: ld returned 1 exit status

我很困惑。

1 个答案:

答案 0 :(得分:8)

A a();是一个函数声明 - 它声明了一个名为a的函数,它返回结构类型A的值。int x = a.m;然后调用函数a (如果不需要参数,则p在D中是可选的),并读取返回值的m字段。

因为函数只是声明但从未定义过,所以程序编译但不链接,因为函数a没有链接器可以看到的主体。