声明"MyStuct a();"之间的区别是什么?和"MyStruct a;"?

Ada*_*ski 2 d

该程序编译和链接:

struct A{
    int m;
}

void main()
{
    A a;
    int x = a.m;
}
Run Code Online (Sandbox Code Playgroud)

虽然这不是:

struct A{
    int m;
}

void main()
{
    A a();
    int x = a.m;
}
Run Code Online (Sandbox Code Playgroud)

$dmd app.d 收益:

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

我很困惑.

Vla*_*eev 8

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

因为该函数仅被声明但从未定义,所以程序编译但不链接,因为该函数a没有链接器可以看到的主体.