我可以在C代码中抛出错误,就像在Julia中的Rcpp的stop()一样

时间:2014-12-24 16:28:32

标签: c++ c julia

在我的原始C ++代码中,我使用assert(),但如果我想在Julia中使用此代码,也许我需要将其替换为其他函数。在R中,我可以使用Rcpp::stop()。使用C或C ++代码在Julia中有没有简单的方法。

似乎Julia还没有R CMD check类似的东西。它没有检查这类问题。

感谢。

2 个答案:

答案 0 :(得分:0)

在C ++中,您可以throw一些exception,例如std::runtime_error喜欢

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

阅读有关C ++如何处理异常的更多信息(自动调用所有中间嵌套析构函数)。

在C代码中,您可以使用longjmp返回主循环(或主程序)中的某个点,使用setjmp(3)。请谨慎使用并阅读有关它的一些内容。 C中通常的做法是使用错误代码(就像大多数C库函数一样)并手动传播它们(或简单地,abortexit(EXIT_FAILURE)传播一些致命的消息,可能使用perror

另请阅读embedding JuliaCalling C & Fortran code from Julia并注意其jl_error事。

答案 1 :(得分:0)

这里的问题是你想要实现的目标。

如果assert()符合您在C中的目的,您也可以在从Julia调用的代码中使用它。请注意,如果发生错误,您的julia会话将被中止,但如果它是指示C代码中的编程错误,则可能完全正常。

如果您希望Julia代码能够以编程方式处理错误条件(并在Julia中获得异常),则需要使用标准C-api实践,并从入口点返回错误代码。在ccall之后,您可以检查错误代码并在Julia中抛出异常。除非您编写一些特定于Julia的特定C代码,否则不建议使用jl_error()