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

Cのマクロの可変長引数


Cの関数に可変長引数を使用できることはわかっています。そのためには、省略記号(…)を使用する必要があります。同様に、マクロの場合、可変長の引数を使用できます。ここでも省略記号を含める必要があります。「__VA_ARGS__」は可変長引数を処理するために使用されます。連結演算子「##」は、変数引数を連結するために使用されます。

この例では、マクロはprintf()またはscanf()関数のような可変長引数を取ります。このマクロでは、ファイル名、行番号、およびエラーメッセージを出力します。最初の引数はprです。これは、優先度、つまり通常の情報文字列かエラーかを判断するために使用されます

#include <stdio.h>
#define INFO 1
#define ERR 2
#define STD_OUT stdout
#define STD_ERR stderr
#define LOG_MESSAGE(pr, strm, msg, ...) do {\
   char *str;\
   if (pr == INFO)\
      str = "INFORMATION";\
   else if (pr == ERR)\
      str = "ERROR";\
      fprintf(strm, "[%s] : %s : %d : "msg" \n", \
      str, __FILE__, __LINE__, ##__VA_ARGS__);\
} while (0)
int main(void) {
   char *s = "Test String";
   LOG_MESSAGE(ERR, STD_ERR, "Unable to open the file"); //here normal message will be printed
   LOG_MESSAGE(INFO, STD_OUT, "%s is passed as argument", s); //pass string argument
   LOG_MESSAGE(INFO, STD_OUT, "%d + %d = %d", 14, 16, (14 + 16)); //Provide integer
}

出力

[ERROR] : D:\text.c : 21 : Unable to open the file
[INFORMATION] : D:\text.c : 23 : Test String is passed as argument
[INFORMATION] : D:\text.c : 25 : 14 + 16 = 30

  1. C与えられた対角線の長さの六角形の領域のプログラム?

    ここでは、対角線の長さを使用して1つの六角形の面積を取得する方法を説明します。六角形の対角線の長さはdです。 正六角形の内角はそれぞれ120°です。すべての内角の合計は720°です。対角線がdの場合、面積は- 例 #include <iostream> #include <cmath> using namespace std; float area(float d) {    if (d < 0) //if d is negative it is invalid       return -1; &nb

  2. Matplotlibの可変長データを使用した箱ひげ図

    Matplotlibで可変長データを使用して箱ひげ図を作成するには、次の手順を実行できます- 図のサイズを設定し、サブプロット間およびサブプロットの周囲のパディングを調整します。 データポイントのリストを作成します。 boxplot()を使用して箱ひげ図を作成します メソッド。 図を表示するには、 show()を使用します メソッド。 例 from matplotlib import pyplot as plt plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autol