工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C言語可変長引数のマスター:実践ガイド

関数に決まった数ではなく、可変個の引数(パラメータ)を渡したい状況があります。C言語はこの状況に対する解決策を提供し、要件に応じて可変個のパラメータを受け取る関数を定義できます。以下はそのような関数の定義例です。

int func(int, ... ) {
    ...
}
int main() {
    func(1, 2, 3);
    func(1, 2, 3, 4);
}

関数func()の最後の引数が省略記号(...、3つのドット)であり、その直前の引数は常にint型で、可変引数の総数を表すことに注意してください。この機能を使うには、stdarg.hヘッダーファイルをインクルードし、以下の手順に従います。

上記手順に従い、可変個のパラメータを受け取って平均値を返すシンプルな関数を作成します。

#include <stdio.h>
#include <stdarg.h>
double average(int num, ...) {
    va_list valist;
    double sum = 0.0;
    int i;
    /* num個の引数でvalistを初期化 */
    va_start(valist, num);
    /* valistに割り当てられた全引数にアクセス */
    for (i = 0; i < num; i++) {
        sum += va_arg(valist, int);
    }
    /* valist用に予約されたメモリをクリーンアップ */
    va_end(valist);
    return sum / num;
}
int main() {
    printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2, 3, 4, 5));
    printf("Average of 5, 10, 15 = %f\n", average(3, 5, 10, 15));
    return 0;
}

実行結果:

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000

average()関数が2回呼ばれており、それぞれ最初の引数が可変引数の総数を表しています。可変引数の受け渡しには省略記号のみを使用します。

C言語

  1. C言語ユーザー定義関数の4つの実証済みパターン
  2. C言語ストレージクラス完全理解:スコープ・ライフタイム・パフォーマンス
  3. C言語で1次元・2次元配列を関数に渡す方法 – 実践ガイド
  4. C++変数とデータ型:int、double、char、string、boolを徹底解説
  5. C 言語の変数、データ型、定数 – 実践ガイド
  6. C言語の変数を理解する:型、命名規則、メモリ管理
  7. C言語の関数マスター:構造、宣言、ベストプラクティス
  8. C言語ポインタ完全マスター:実践的ステップで上級プログラミングへ
  9. C言語ビットフィールド:メモリ効率を最大化するテクニック
  10. Verilog代入文の理解:種類、構文、ベストプラクティス
  11. Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数