Я хочу вызвать функцию zig из c, но тип возвращаемого значения fn — это объединение ошибок !void
или MyType.Error!u32
как справиться с ошибкой?
давайте предположим, что у нас есть следующее lib.zig
pub fn errorProneFunction(param1: *Task, param2: u32) Error!u32 {
return Error.TooManyTasksForLazyMe;
}
Я хочу вызвать функцию из c
type??? my_var = errorProneFunction(&task, 0);
Если вы хотите вызвать функцию Zig из C, вам нужно объявить эту функцию как export . И такие функции не могут возвращать объединение ошибок. Компилятор выдаст такую ошибку:
src\main.zig:3157:33: error: return type '@typeInfo(@typeInfo(@TypeOf(main.errorProneFunction)).Fn.return_type.?).ErrorUnion.error_set!u32' not allowed in function with calling convention 'C'
export fn errorProneFunction() !u32 {
^~~