[C]#DEFINEマクロ

2169 ワード

マクロ


C言語システムは、特定のタスクを示すためにコンパイラにプリプロセッサ(プリプロセッサ)を提供する.通常、プリプロセッサは、繰返し値またはタスクを事前に定義し、コンパイルオプションまたは条件コンパイルを設定できます.

#defineマクロ


配列またはダイナミックメモリを指定するポインタは、通常、繰り返し文とともに使用されます.通常、配列とメモリサイズに従って値を繰り返し出力または保存します.
#inlcude <stdio.h>

void main() {
	char s1[10];    // 문자 10개 크기의 배열 선언

    for (int i = 0; i < 10; i++)    // 배열 크기만큼 반복
    {
        s1[i] = 97 + i;
    }

    for (int i = 0; i < 10; i++)    // 배열 크기만큼 반복
    {
        printf("%c ", s1[i]);
    }

}
実行結果
a b c d e f g h i j
このコードの問題は、10回を3回繰り返すことです.配列のサイズを変更する場合は、繰り返し文の10もすべて変更する必要があります.ここでは3つの10しかないので変換には大きな問題はありませんが、使う部分が多くなるにつれて数字の変更が難しくなり、間違いの可能性も高くなります.
特に、10は配列s 1のサイズを表すが、コードにはさらに多くの内容が追加されているため、10を配列サイズの独立したアイテムとして使用することができる.すなわち,異なる意味の10を混合して用いると,各意味が混同されやすい.
この問題を解決するには、マクロを定義するだけです.#defineインジケータは、変数と同じ名前で値を別の名前として定義します.通常、マクロには大文字が使用されます.
#include <stdio.h>

#define ARRAY_SIZE 10    // 10을 ARRAY_SIZE로 정의

int main()
{
    char s1[ARRAY_SIZE];    // 10 대신 ARRAY_SIZE 매크로 사용

    for (int i = 0; i < ARRAY_SIZE; i++)    // 10 대신 ARRAY_SIZE 매크로 사용
    {
        s1[i] = 97 + i;
    }

    for (int i = 0; i < ARRAY_SIZE; i++)    // 10 대신 ARRAY_SIZE 매크로 사용
    {
        printf("%c ", s1[i]);
    }

    return 0;
}
実行結果
a b c d e f g h i j
これらの相関値を引き続き使用する場合は、値を1つずつ入力するのではなく、マクロを定義して使用することが望ましい.配列s 1のサイズを変更する場合は、#defineセクションの10を変更し、ARRAY SIZEマクロが使用するセクションにバッチを適用します.これは、コードが長く複雑になったときにコード入力エラーを減らすことができることを意味します.

#defineマクロの利点

  • の毒性は非常に高い.
  • 10どう見ても何なのかわかりませんが、これをARRAY SIZEと決めたら、誰が見ても『あっ!「配列長さ」であることがわかります.
  • 定数の変更は簡単です
  • コードに10を直接書き込む場合は、アレイの長さをさらに増やしたい場合は、これらのすべての部分を検索して変更する必要があります.ただし、マクロが定義されている場合は、1つのマクロを変更するだけです.