Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cでのマクロと関数


このセクションでは、Cのマクロと関数の違いを確認します。マクロは前処理されているため、コンパイル中にすべてのマクロが前処理されることを意味します。関数は前処理されませんが、コンパイルされます。

マクロではタイプチェックが行われないため、さまざまなタイプの入力で問題が発生する可能性があります。関数の場合、これは行われません。また、マクロの場合、入力が適切に維持されていないと、無効な結果が生成される可能性があります。次のプログラムをチェックして、問題について考えてください。

#include <stdio.h>
#define SQUARE(x) x * x
int sqr(int x) {
   return x*x;
}
main() {
   printf("Use of sqr(). The value of sqr(3+2): %d\n", sqr(3+2));
   printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2));
}

出力

Use of sqr(). The value of sqr(3+2): 25
Use of SQUARE(). The value of SQUARE(3+2): 11

関数とマクロ、両方が同じタスクを実行するようにしたいのですが、ここでは出力が同じではないことがわかります。主な理由は、関数の引数として3 + 2を渡す場合、5に変換し、5 * 5=25を計算します。マクロの場合は3+2 * 3 + 2 =3 + 6 + 2=11を実行します。

したがって、マクロは次の問題には推奨されません-

  • タイプチェックはありません

  • 単純な置換が発生するため、デフォルトでデバッグされます

  • マクロには名前空間がありません。したがって、マクロが1つのセクションで定義されている場合は、別のセクションで使用できます。

  • マクロは、前処理中にコードの前に追加されるため、コードの長さが長くなります。

  • マクロはコンパイル時エラーをチェックしません。


  1. Cの正方形の中に正方形を印刷するプログラム

    プログラムの説明 以下に示すように、正方形の内側に正方形を印刷します アルゴリズム Accept the number of rows the outer Square to be drawn Display the Outer Square with the number of rows specified by the User. Display another square inside the outer square. 例 /* Program to print Square inside Square */ #include <stdio.h> int main

  2. 正方形の中の葉の面積?

    ここでは、正方形ABCDの内側にある葉のような領域を取得する方法を説明します。正方形の各辺の長さは「a」です。 葉には2つの等しい部分があります。各部分の面積はpと言われ、今は- そして、完全な葉の面積は2pです。 例 #include <iostream> using namespace std; float leafArea(float a){    return (a * a * (3.1415/2 - 1)); } int main() {    float square_side = 7.0f;   &nb