ホームページ  >  記事  >  バックエンド開発  >  C言語で健康マクロ

C言語で健康マクロ

王林
王林転載
2023-09-03 18:09:08633ブラウズ

C言語で健康マクロ

ここでは、C の衛生マクロを見ていきます。私たちは C でマクロを使用する方法を知っています。ただし、予期しない識別子のキャプチャにより、予期した結果が返されない場合があります。

以下のコードを見ると、正しく動作していないことがわかります。

Example

#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);
}

前処理後のコードは次のようになります -

Example

#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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。