Эффект extern (C) для типа функции в Dlang - PullRequest
0 голосов
/ 05 января 2019

Если псевдоним типа функции определен внутри 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);

чтобы это работало?

1 Ответ

0 голосов
/ 05 января 2019

Да, атрибут или объявление с областью действия применяется ко всем символам внутри своей области видимости (за исключением того, что они явно перезаписывают или перезаписывают вложенную область видимости). Доказательство:

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

Проверьте сами на run.dlang.io .

...