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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 程序
C++
C#
MongoDB
MySQL
Javascript
PHP