首頁 >後端開發 >C++ >在C語言中,衛生宏

在C語言中,衛生宏

王林
王林轉載
2023-09-03 18:09:08677瀏覽

在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</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中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除