Могу ли я выдать ошибку в коде c так же, как stop () Rcpp в Джулии

В моем исходном коде C ++ я использую assert(), но если я хочу использовать этот код в Джулии, возможно, мне нужно заменить его другими функциями. В R я могу использовать Rcpp::stop(), Есть ли простой способ сделать это в Юлии с кодом C или C ++.

И похоже, что у Юлии нет R CMD check еще не нравится Это не проверяет этот вид проблемы.

Благодарю.

1

Решение

Вопрос в том, чего вы хотите достичь.

Если assert() соответствует вашей цели в C, вы можете использовать это и в коде, который вызывается из Julia. Обратите внимание, что ваш сеанс julia будет прерван, если произойдет ошибка, но если она должна указывать на программную ошибку в вашем C-коде, это, вероятно, вполне нормально.

Если вы хотите, чтобы ваш код Julia мог программно обрабатывать состояние ошибки (и получить исключение в Julia), вам нужно использовать стандартные методы C-api и возвращать код ошибки из точки входа. После ccallВы можете проверить код ошибки и выдать исключение в Юлии. jl_error() не рекомендуется использовать, если вы не написали какой-то очень специфичный для Джулии C-код.

0

Другие решения

В C ++ вы можете throw немного исключение, например std::runtime_error лайк

throw std::runtime_error("bad error");

Узнайте больше о том, как C ++ обрабатывает исключения (со всеми автоматически вложенными промежуточными деструкторами).

В коде C вы можете использовать longjmp вернуться к некоторой точке вашего основного цикла (или основной программы), при некотором использовании setjmp (3). Используйте это с большой осторожностью и прочитайте несколько вещей об этом. Обычная практика в C — использовать коды ошибок (как это делают большинство функций библиотеки C) и распространять их вручную (или просто abort или же exit(EXIT_FAILURE) с некоторым фатальным сообщением, возможно, используя perror)

Читайте также о встраивание Юлия, Вызов C & Фортран код от Юлии и заметить его jl_error вещь.

0

По вопросам рекламы [email protected]