extern(C) 对 Dlang 中函数类型的影响

Effect of extern(C) for function type in Dlang

如果在 extern(C) 中定义了函数类型别名,如下例所示:

extern(C) {
  alias F = void function(int x);
}

这会保证别名类型是 extern(C) 吗?

还是需要写

extern(C) {
  alias F = extern(C) void function(int x);
}

或者只是

alias F = extern(C) void function(int x);

这行得通吗?

是的,范围内的属性或声明适用于其范围内的所有符号(除非它们明确覆盖它或嵌套范围覆盖它)。 证明:

extern(C) {
  alias F = void function(int x);
}
alias G = void function(int x);
alias H = extern(C) void function(int x);

pragma(msg, F.mangleof); // PUiZv
pragma(msg, G.mangleof); // PFiZv
pragma(msg, H.mangleof); // PUiZv

检查it out for yourself on run.dlang.io