这里我们将看到 C 中的卫生宏。我们知道 C 中宏的用法。但有时,由于意外捕获标识符,它不会返回预期的结果。
如果我们看到下面的代码,我们可以看到它无法正常工作。
示例
#include#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", a, b);}
登录后复制
预处理后代码将如下所示 –
示例
#include#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", a, b);}
登录后复制
输出
a = 10, b = 21
登录后复制
在这里我们可以看到 a 的值没有更新。因此在这种情况下我们将使用卫生宏。这些卫生宏的扩展可保证不会意外捕获标识符。在这里,我们不会使用任何可能与扩展中的代码交互的变量名称。这里在宏内部使用了另一个变量“t”。程序本身没有使用它。
立即学习“C语言免费学习笔记(深入)”;
示例
#include#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", a, b);}
登录后复制
输出
a = 11, b = 21
登录后复制
以上就是在C语言中,卫生宏的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2584001.html