
这里我们将看到 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); }
预处理后代码将如下所示 -
酷纬企业网站管理系统Kuwebs是酷纬信息开发的为企业网站提供解决方案而开发的营销型网站系统。在线留言模块、常见问题模块、友情链接模块。前台采用DIV+CSS,遵循SEO标准。 1.支持中文、英文两种版本,后台可以在不同的环境下编辑中英文。 3.程序和界面分离,提供通用的PHP标准语法字段供前台调用,可以为不同的页面设置不同的风格。 5.支持google地图生成、自定义标题、自定义关键词、自定义描
示例
#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










