该程序编译并链接:
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
我很困惑。
答案 0 :(得分:8)
A a();
是一个函数声明 - 它声明了一个名为a
的函数,它返回结构类型A
的值。int x = a.m;
然后调用函数a
(如果不需要参数,则p在D中是可选的),并读取返回值的m
字段。
因为函数只是声明但从未定义过,所以程序编译但不链接,因为函数a
没有链接器可以看到的主体。