您好,欢迎访问一九零五行业门户网

在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
", 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
", 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
", a, b);}
输出a = 11, b = 21
以上就是在c语言中,卫生宏的详细内容。
其它类似信息

推荐信息