在c中有一个非致命的等同于断言吗?

hdb*_*db3 2 c assert

我想写assert语句但不会中止该程序.所以也许使用与assert()完全相同的语法,但称为expect().当然我可以编写自己的,但断言非常聪明(例如,它不仅知道文件和行号,而且甚至知道不是TRUE的表达式).我当然可以深入了解库和Cv/Cc解决方案.但这是一个非常明显的通用请求,我无法相信已经没有一个好的解决方案了.这当然应该很容易找到...

Som*_*ude 9

这是因为它assert是一个预处理器宏,所以可以使用__LINE____FILE__宏,因为整个宏调用被扩展为一行.

您可以轻松制作自己的:

#define expect(value, message) \
    do \
    { \
        if (!(value)) \
        { \
            fprintf(stderr, "%s failed in %s:%d\n", #value, __FILE__, __LINE__); \
        } \
    } while(0)
Run Code Online (Sandbox Code Playgroud)

  • ...而且你没有"else"的问题,它出乎意料地与`if`绑定. (4认同)