如果在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);
要这样做吗?
答案 0 :(得分:1)
是的,有作用域的属性或声明适用于其作用域内的所有符号(除非它们明确覆盖了它或嵌套作用域覆盖了它)。 证明:
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