首页 > 后端开发 > C++ > 正文

在C语言中,卫生宏

王林
发布: 2023-09-03 18:09:08
转载
642 人浏览过

在C语言中,卫生宏

这里我们将看到 C 中的卫生宏。我们知道 C 中宏的用法。但有时,由于意外捕获标识符,它不会返回预期的结果。

如果我们看到下面的代码,我们可以看到它无法正常工作。

示例

#include<stdio.h>
#define INCREMENT(i) do { int a = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   INCREMENT(a);
   INCREMENT(b);
   printf("a = %d, b = %d</p><p>", a, b);
}
登录后复制

预处理后代码将如下所示 -

示例

#include<stdio.h>
#define INCREMENT(i) do { int a = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   do { int a = 0; ++a; } while(0) ;
   do { int a = 0; ++b; } while(0) ;
   printf("a = %d, b = %d</p><p>", a, b);
}
登录后复制

输出

a = 10, b = 21
登录后复制

在这里我们可以看到 a 的值没有更新。因此在这种情况下我们将使用卫生宏。这些卫生宏的扩展可保证不会意外捕获标识符。在这里,我们不会使用任何可能与扩展中的代码交互的变量名称。这里在宏内部使用了另一个变量“t”。程序本身没有使用它。

示例

#include<stdio.h>
#define INCREMENT(i) do { int t = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   INCREMENT(a);
   INCREMENT(b);
   printf("a = %d, b = %d</p><p>", a, b);
}
登录后复制

输出

a = 11, b = 21
登录后复制

以上是在C语言中,卫生宏的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板