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