gpt4 book ai didi

c - 打印传入值的断言宏

转载 作者:行者123 更新时间:2023-11-30 17:12:23 24 4
gpt4 key购买 nike

在我们的 C 代码库中,我们有断言宏,例如:

ASSERT3(x, ==, y)      // x=0, y=1 results in "main.c:45: 'x == y' (0 == 1) is untrue"
ASSERT(x == y) // x=0, y=1 results in "main.c:45: 'x == y' is untrue"

显然,ASSERT3当您在失败后尝试调试某些内容时,form 会更有帮助,因为它会告诉您变量的值是什么。

但是,每当您需要执行更复杂的断言时(尤其是那些包含 || 的断言,因为您可以将 && 的断言分成多个断言),例如 ASSERT(x == y || y != 0 || x == 2) ,您将无法再利用很棒的ASSERT3格式。显然,我可以构建一个像ASSERT11(x, ==, y, ||, y, !=, 0, ||, x, ==, 2)这样的宏。 ,但理想情况下,我想创建一个单独的宏,它可以处理可变数量的参数,并弄清楚自己要打印的内容。为此,我想我需要宏来过滤掉只是逻辑运算符的参数,这样它就不会尝试打印它们的值——有什么办法可以做到这一点吗?

最佳答案

我有这样的感觉和想法,但事实证明断言是为了那些永远不应该发生的事情,所以为它们提供花哨的输出并没有真正的意义。您正在寻找的是在不满足这些条件时打印的调试消息,因此您应该这样编码:

if (!condition) {
DEBUG(whatever); /* or however your ASSERT() macro prints */
PANIC(); /* or however your ASSERT() macro aborts */
}

在这种情况下,我实际上认为代码会更容易编写,更容易阅读,并且比您最终得到的复杂 ASSERT 语句更可靠。更不用说一旦断言变得如此复杂,肯定还有其他重要的相关信息实际上并不在断言语句中。

关于c - 打印传入值的断言宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com