logo

C のマクロとその型

C では、 大きい は、マクロの値に置き換えられるプログラム内のコードの一部です。マクロは次のように定義されます #定義する 指令。コンパイラはマクロ名を検出すると、その名前をマクロの定義に置き換えます。マクロ定義はセミコロン()で終了する必要はありません。 ; )。

C のマクロの例

以下は、C でのマクロの使用法を示すプログラムです。



例1

以下の例は、マクロを使用して LIMIT を定義する方法を示しています。

C








// C program to illustrate macros> #include> // Macro definition> #define LIMIT 5> // Driver Code> int> main()> {> >// Print the value of macro defined> >printf>(>'The value of LIMIT'> >' is %d'>,> >LIMIT);> >return> 0;> }>

>

>

出力

The value of LIMIT is 5>

例 2

以下の例は、マクロを使用して長方形の面積を見つける方法を示しています。

C




// C program to illustrate macros> #include> // Macro definition> #define AREA(l, b) (l * b)> // Driver Code> int> main()> {> >// Given lengths l1 and l2> >int> l1 = 10, l2 = 5, area;> >// Find the area using macros> >area = AREA(l1, l2);> >// Print the area> >printf>(>'Area of rectangle'> >' is: %d'>,> >area);> >return> 0;> }>

>

>

出力

Area of rectangle is: 50>

説明
上記のプログラムから、コンパイラーが次のことを検出するたびに、 エリア(l, b) プログラム内ではマクロ定義に置き換えられます。つまり、 (ポンド) 。マクロ テンプレートに渡される値 エリア(l, b) ステートメントにも置き換えられます (ポンド) 。したがって、 エリア(10, 5) に等しくなります 10*5

C のマクロの種類

C 言語には 2 種類のマクロがあります。

1. オブジェクトのようなマクロ

オブジェクトのようなマクロは、コードフラグメントによって置き換えられる単純な識別子です。これは、それを使用するコード内のオブジェクトのように見えるため、オブジェクト様と呼ばれます。これは、シンボル名を定数として表される数値/変数に置き換えるのによく使用されます。

以下の例は、単純なマクロ、つまりオブジェクトのようなマクロを示しています。

C




// C program to illustrate macros> #include> // Macro definition> #define DATE 31> // Driver Code> int> main()> {> >// Print the message> >printf>(>'Lockdown will be extended'> >' upto %d-MAY-2020'>,> >DATE);> >return> 0;> }>

>

>

出力

Lockdown will be extended upto 31-MAY-2020>

2. チェーンマクロ

マクロ内のマクロはチェーン マクロと呼ばれます。チェーン マクロでは、まず親マクロが展開され、次に子マクロが展開されます。

以下のプログラムはチェーンマクロの図です。

C




// C program to illustrate macros> #include> > // Macro definition> #define INSTAGRAM FOLLOWERS> #define FOLLOWERS 138> > // Driver Code> int> main()> {> >// Print the message> >printf>(>'Geeks for Geeks have %dK'> >' followers on Instagram'>,> >INSTAGRAM);> > >return> 0;> }>

>

>

出力

Geeks for Geeks have 138K followers on Instagram>

説明:
FOLLOWERSを生み出すために、まずINSTAGRAMを拡張します。次に、展開されたマクロが展開されて、結果が 138K になります。これをマクロの連鎖と呼びます。

3. 複数行マクロ

オブジェクトのようなマクロには複数行を含めることができます。したがって、複数行のマクロを作成するには、バックスラッシュと改行を使用する必要があります。

以下は複数行マクロの図です。

C




// C program to illustrate macros> #include> // Multi-line Macro definition> #define ELE 1,> >2,> >3> // Driver Code> int> main()> {> >// Array arr[] with elements> >// defined in macros> >int> arr[] = { ELE };> >// Print elements> >printf>(>'Elements of Array are: '>);> >for> (>int> i = 0; i <3; i++) {> >printf>(>'%d '>, arr[i]);> >}> >return> 0;> }>

>

>

出力

Elements of Array are: 1 2 3>

4. 関数型マクロ

これらのマクロは関数呼び出しと同じです。関数名ではなくコード全体を置き換えます。マクロ名の直後に括弧が必要です。もし マクロ定義のマクロ名と括弧の間にスペースを入れると、マクロは機能しなくなります
関数のようなマクロは、名前の後に括弧のペアが付いている場合にのみ延長されます。これを行わないと、関数ポインタが実際の関数のアドレスを取得し、構文エラーが発生します。

以下の例は、関数に似たマクロの図です。

C


ABSCコード



// C program to illustrate macros> #include> // Function-like Macro definition> #define min(a, b) (((a) <(b)) ? (a) : (b))> // Driver Code> int> main()> {> >// Given two number a and b> >int> a = 18;> >int> b = 76;> >printf>(>'Minimum value between'> >' %d and %d is %d '>,> >a, b, min(a, b));> >return> 0;> }>

>

>

出力

Minimum value between 18 and 76 is 18>

マクロをより深く理解するための 1 つの例を次に示します。

問題: を定義して円の面積を見つける必要があります。 エリア(r) マクロ。

C




#include> #define PI 3.1416> #define AREA(r) (PI*(r)*(r))> int> main() {> >float> r = 7;>// radius of circle> > >printf>(>'Area of Circle with radius %.0f: %.3f'>, r, AREA(r));> >return> 0;> }> // This code is contributed by Susobhan Akhuli>

>

>

出力

Area of Circle with radius 7: 153.938>

結論

マクロは、1 つのコマンドで実行できる小さなコードです。これらを使用すると、タスクを自動化し、複雑なプロセスを簡素化し、生産性を向上させることができます。ただし、マクロの使用にはいくつかの欠点もあります。マクロの長所と短所は次のとおりです。

C マクロに関する FAQ

Q1.マクロの利点は何ですか?

答え:

    生産性の向上: マクロを使用すると、反復的なタスクを自動化することで時間を節約し、エラーを減らすことができます。カスタマイズ: 特定のニーズに合わせてマクロをカスタマイズできるため、タスクの完了方法をより柔軟に行うことができます。一貫性: マクロは、あらかじめ決められた一連の指示に従うことで、タスクの一貫性を確保するのに役立ちます。効率: マクロは人間よりも迅速にタスクを実行できるため、全体的な効率が向上します。使いやすさ: マクロの作成と使用は簡単で、プログラミングの知識はほとんど、またはまったく必要ありません。

Q2.マクロのデメリットは何ですか?

答え:

    セキュリティ リスク: マクロが適切に保護されていない場合、または悪意のあるコードの実行に使用される場合、マクロはセキュリティ リスクとなる可能性があります。機能の制限: マクロはより複雑なタスクを実行できない場合があり、その有用性が制限されます。互換性の問題: マクロはすべてのソフトウェア アプリケーションと互換性がない可能性があり、その有用性が制限されます。メンテナンス: マクロにはメンテナンスと更新が必要になる場合があり、時間とコストがかかる場合があります。依存性: マクロに過度に依存すると、問題解決スキルや批判的思考が低下する可能性があります。

Q3. マクロは引数を取ることができますか?

答え:

はい、マクロは引数を取ることができます。たとえば、MAX は 2 つの引数 (a と b) を受け取り、その 2 つの最大値を返すマクロです。

Q4. マクロは再帰的に使用できますか?

答え:

いいえ、マクロを再帰的に使用することはできません。マクロが再帰的になると、定義がそれ自体を参照し、前処理中に無限ループが発生します。