
这里我们将看到 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”。程序本身没有使用它。
立即学习“C语言免费学习笔记(深入)”;
#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中文网其它相关文章!
C语言怎么学习?C语言怎么入门?C语言在哪学?C语言怎么学才快?不用担心,这里为大家提供了C语言速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号