Позвольте мне сначала сказать, что у меня очень ограниченные знания в программировании Objective C.Безопасная обработка кода пользователя Objective C с кодовой базы C
У меня есть C исполняемый файл, который вызывает в определяемой пользователем функции, написанные на Objective C.
при условии, что ничего может произойти в пользовательском коде, что бы быть лучшим способом, чтобы безопасно обернуть код так, чтобы функция C возвращает изящно?
В оболочке C++ я бы написал функцию try-catch для всех исключений, чтобы исключение C++ не распространялось на C-код, где поведение не определено стандартом C.
Я полагаю, что я должен сначала предотвратить исключение ObjC от пересечения границы языка (т.е. распространяться в код C), так что я бы написать обертку, как:
void objc_wrap(void) {
@try {
obj_entry();
}
@catch (NSException *ex) {
// handle NSException
}
@catch (...) {
// handle the rest
}
}
Однако, мое ограниченное знание Язык не говорит мне, есть ли другие механизмы, которые бы заставили код пользователя пересечь границу модуля и вызвать неопределенное исключение.
Кроме того, любая инициализация/очистка среды выполнения Objective C, необходимая до вызова пользовательской функции, при условии, что точка входа является чистой C?
Примечание: Сигналы и выход() не должны обрабатываться, поскольку обертка выполняется в разветвленном процессе.
Что вы подразумеваете под * кодом пользователя, пересекающим границу модуля *? – Caleb
@Caleb Я имею в виду, что единственный разрешенный способ вернуться к базе кода C - 'return'; например, необработанные исключения будут эффективно пересекать границу и вызывать неопределенное поведение, потому что в стандарте C нигде не указано, что произойдет. Другим примером может быть «panic!()» В функции ржавчины, вызванной C. – Snaipe
@zaph отредактировал вопрос для ясности. Является ли проблема более понятной? – Snaipe