C函数中可以有两种返回类型吗?

时间:2018-09-27 10:53:29

标签: objective-c c

我正在寻找一个project,目的是将Cocoa API暴露给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 :(得分:2)

CAMLprim似乎根本不是一种类型,而是该函数的链接/存储类-似乎#define被填充为我发现的某些标头中的空字符串。真正的返回类型是value,它是整数类型的typedef

答案 1 :(得分:1)

对于documentation,对于返回为CAMLprim value的任何函数

  

此函数必须具有返回类型CAMLprim值,并且其参数类型必须为value。 OCaml提供给C函数的所有参数均为类型值。 include头提供转换宏,以将类型值转换为C本机类型。在这种情况下,要转换为C整数,则该宏为Int_val()。 然后,由于OCaml函数的返回值是单位,因此C函数必须返回一个单位,这是通过宏Val_unit完成的。​​