這裡我們將會看到 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”。程式本身沒有使用它。
#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中文網其他相關文章!