c - 是否有非致命的等价于 c 中的断言?

标签 c assert

我想写断言语句但不想中止程序。所以也许使用与 assert() 完全相同的语法,但称为 expect()。当然我可以自己写,但是 assert 非常聪明(例如,它不仅知道文件和行号,甚至知道不正确的表达式)。 我当然可以深入研究图书馆和 C-v/C-c 一个解决方案。 但这是一个如此明显的通用请求,我无法相信已经没有好的解决方案。这当然应该很容易在这里找到...

最佳答案

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

您可以轻松制作自己的:

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

关于c - 是否有非致命的等价于 c 中的断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758422/

相关文章:

python - “assert False”和 “self.assertFalse”有什么优势或区别

c - 将一定数量的字节添加到 C 中的 void 指针

c - 初始化错误

c++ - 符号 ":"在 C 和 C++ 中意味着什么?

c++ - C++ 中的未定义行为断言 : accessing an invalid/null pointer

c - Windows : preventing assert() failures from opening the debug popup

c - c的多维数组理解

android - 在 Android 5/Lollipop 上打印 C 堆栈跟踪

java - 断言关键字(无法解析符号断言)

xml - XML 模式中的复杂断言