Может ли быть два типа возврата в функции C? - PullRequest
0 голосов
/ 27 сентября 2018

Я смотрю на проект , целью которого является предоставление API-интерфейсов Cocoa для OCaml.Код состоит из функции, которая имеет два значения, в которых упоминается тип возвращаемого значения.

CAMLprim value ml_NSWindow_center(value win_v)
{
  CAMLparam1(win_v);
  NSWindow *win = NSWindow_val(win_v);
  [win center];
  CAMLreturn(Val_unit);
}

Возможно ли это?или это не тип возврата.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

CAMLprim кажется не типом вообще, а классом связи / хранения для функции - похоже, #define d, чтобы очистить строки в некоторых заголовках, которые я нашел.Реальный тип возврата - value, что является typedef для целочисленного типа.

0 голосов
/ 27 сентября 2018

Согласно документации , для любой функции с возвращаемым значением CAMLprim value

Эта функция должна иметь значение возвращаемого типа CAMLprim, а ее тип параметра должен быть значением.Все параметры, передаваемые функциям C из OCaml, имеют значение типа.Заголовок include предоставляет макросы преобразования для преобразования значения типа в собственные типы Си.В этом случае для преобразования в целое число C этот макрос называется Int_val (). Тогда, поскольку возвращаемое значение функции OCaml является единицей, функция C должна вернуть единицу, что делается с помощью макроса Val_unit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...