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
如果在 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