В моем исходном коде C ++ я использую assert()
, но если я хочу использовать этот код в Джулии, возможно, мне нужно заменить его другими функциями. В R я могу использовать Rcpp::stop()
, Есть ли простой способ сделать это в Юлии с кодом C или C ++.
И похоже, что у Юлии нет R CMD check
еще не нравится Это не проверяет этот вид проблемы.
Благодарю.
Вопрос в том, чего вы хотите достичь.
Если assert()
соответствует вашей цели в C, вы можете использовать это и в коде, который вызывается из Julia. Обратите внимание, что ваш сеанс julia будет прерван, если произойдет ошибка, но если она должна указывать на программную ошибку в вашем C-коде, это, вероятно, вполне нормально.
Если вы хотите, чтобы ваш код Julia мог программно обрабатывать состояние ошибки (и получить исключение в Julia), вам нужно использовать стандартные методы C-api и возвращать код ошибки из точки входа. После ccall
Вы можете проверить код ошибки и выдать исключение в Юлии. jl_error()
не рекомендуется использовать, если вы не написали какой-то очень специфичный для Джулии C-код.
В 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
вещь.