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

在C語言中,衛生宏

王林
發布: 2023-09-03 18:09:08
轉載
715 人瀏覽過

在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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板