Zmienna ilość argumentów funkcji w C

W programowaniu w języku C istnieje możliwość tworzenia funkcji, które mogą przyjmować zmienną ilość argumentów. Taka funkcjonalność jest szczególnie użyteczna w przypadku, gdy liczba argumentów nie jest znana na etapie pisania kodu, na przykład przy tworzeniu funkcji logujących, formatujących tekst czy matematycznych operujących na różnej liczbie operandów. Aby zaimplementować funkcję przyjmującą zmienną liczbę argumentów w C, używa się specjalnych makr zdefiniowanych w nagłówku <stdarg.h>.

Przykład kodu w C: Funkcja sumująca zmienną liczbę argumentów

#include <stdio.h>
#include <stdarg.h>

// Funkcja przyjmująca zmienną liczbę argumentów
double sum(int count, ...) {
    double result = 0.0;
    va_list args;
    
    // Inicjalizacja va_list
    va_start(args, count);
    
    // Sumowanie argumentów
    for(int i = 0; i < count; i++) {
        result += va_arg(args, double);
    }
    
    // Czyszczenie va_list
    va_end(args);
    
    return result;
}

int main() {
    // Wywołanie funkcji z różną liczbą argumentów
    printf("Suma 3 liczb: %f\n", sum(3, 1.0, 2.0, 3.0));
    printf("Suma 5 liczb: %f\n", sum(5, 1.0, 2.0, 3.0, 4.0, 5.0));
    
    return 0;
}

Komentarze do kodu

  • Definicja funkcji przyjmującej zmienną liczbę argumentów: Pierwszy argument funkcji sum określa liczbę argumentów, które mają zostać zsumowane, a następnie używany jest mechanizm ... do wskazania, że funkcja przyjmie zmienną liczbę argumentów.
  • Użycie va_list, va_start, va_arg, va_end: Są to makra z nagłówka <stdarg.h>, które umożliwiają obsługę zmiennych list argumentów. va_list jest używany do przechowywania informacji potrzebnych do va_arg do odzyskiwania kolejnych argumentów o nieokreślonym typie. va_start inicjalizuje listę argumentów, va_arg pobiera kolejny argument określonego typu, a va_end kończy ich przetwarzanie.

Podsumowanie

Funkcje przyjmujące zmienną liczbę argumentów są potężnym narzędziem w języku C, pozwalającym na tworzenie bardziej elastycznego i uniwersalnego kodu. Kluczowe jest zrozumienie i poprawne stosowanie mechanizmów dostarczanych przez nagłówek <stdarg.h>, aby efektywnie manipulować listami argumentów o zmiennej długości. Dzięki temu można tworzyć funkcje, które są w stanie obsługiwać różnorodne przypadki użycia bez potrzeby definiowania wielu przeciążeń funkcji czy stosowania mniej wydajnych i elastycznych rozwiązań.

Scroll to Top