代码宏定义中使用循环语句

Posted 小道安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码宏定义中使用循环语句相关的知识,希望对你有一定的参考价值。

背景

今天无意间在看某开源的代码,看到了下面的一段比较有趣的代码。
它有趣的地方在于使用do …while(0)循环语句,并且使用的在于defind的宏定义函数中。

/**
 * Assert that err matches expect
 */
#define uc_assert_err(expect, err)                                  \\
do                                                                 \\
    uc_err __err = err;                                             \\
    if (__err != expect)                                           \\
        fail_msg("%s", uc_strerror(__err));                         \\
                                                                   \\
 while (0)
/**
 * Assert that err is anything but UC_ERR_OK
 *
 * Note: Better to use uc_assert_err(<specific error>, err),
 * as this serves to document which errors a function will return
 * in various scenarios.
 */
#define uc_assert_fail(err)                                         \\
do                                                                 \\
    uc_err __err = err;                                             \\
    if (__err == UC_ERR_OK)                                        \\
        fail_msg("%s", uc_strerror(__err));                         \\
                                                                   \\
 while (0)

循环语句

我们再写代码过程中用到的循环语句一般都是使用for、while、dowhile(1)这些表达式,dowhile(0)这样的语句几乎或者相对使用的比较少

从功能上来说
do…while(1):它是一个死循环语句,语句是否结束靠的是do里面做跳出的判断;
do…while(0):它也是一个循环语句,不过它只做一次的do的代码执行就结束了。

从用法来说

do…while(0):它的使用是在宏定义函数中。通过宏定义来控制作用域,可以通过避免预处理过程中的一些开销和错误。并且能够确保代码执行行为保持一致性。

以上是关于代码宏定义中使用循环语句的主要内容,如果未能解决你的问题,请参考以下文章

内联函数和宏定义

C语言宏定义宏替换

C语言do...while语句的妙用(包裹宏替换多句代码)(代替go to语法)(隔绝外部变量)

vba for循环

C 语言宏定义中使用do...while

do while的作用