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