代码之家  ›  专栏  ›  技术社区  ›  porton

外显子(C)对Dlang函数类型的影响

  •  0
  • porton  · 技术社区  · 7 年前

    如果在内部定义了函数类型别名 extern(C)

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

    这是否保证别名类型为 ?

    还是我需要写信

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

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

    为了让它起作用?

    1 回复  |  直到 7 年前
        1
  •  1
  •   greenify    7 年前

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

    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 .