extern (C) в интерфейсе от D до C? - PullRequest
0 голосов
/ 08 января 2019

При сопряжении D к C, нужно ли extern(C) для структур и перечислений?

extern(C) enum XX { A, B }

extern(C) struct Z { int x; }

Нужно ли extern(C) выше для правильного вызова

extern extern(C) void f(XX a, Z b)

1 Ответ

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

Нет, это не влияет на структуры и перечисления. extern(C) в первую очередь для функций и типов указателей на функции, а иногда и для переменных, совместно используемых с C (где вы можете увидеть extern extern(C) __gshared type name; - первый внешний вид означает, что он определен внешне (другими словами, это определение только для использования, а не распределение пространства хранения), второе значение, определенное для C, __gshared означает глобальную переменную стиля C.)

Но по большей части вы должны использовать его только для функций и указателей на функции. Определения структуры даже не должны строго соответствовать - например, имена вообще не имеют значения, а в некоторых случаях и содержимое не имеет значения (если оно передается только через указатель, вы можете избежать непрозрачное определение - нет тела к структуре).

...