Η C είναι απλή/Μεταβλητό Πλήθος Παραμέτρων

ΕισαγωγήΕπεξεργασία

Εξαιτίας του τρόπου με τον οποίο θέλουμε να τις χρησιμοποιήσουμε, πολλές συναρτήσεις δεν έχουν συγκεκριμένο πλήθος παραμέτρων που πρέπει να τους δώσουμε. Για παράδειγμα, η printf() μπορεί να πάρει πολλές ανάλογα τι θέλουμε να κάνουμε. Το πώς μπορείτε να κάνετε κι εσείς το ίδιο με τις δικές σας συναρτήσεις θα εξηγηθεί παρακάτω.

ΧρήσηΕπεξεργασία

Για να πούμε στη C ότι θέλουμε να περάσουμε μεταβλητό πλήθος παραμέτρων, η σύνταξη του πρωτοτύπου γίνεται έτσι:

int makeSum(int n, ...);

σ' αυτό το παράδειγμα η πρώτη παράμετρος θα είναι πάντα το πλήθος των παραμέτρων που θα ακολουθήσουν.

stdarg.hΕπεξεργασία

Για να κάνετε όλα όσα αναφέρονται παρακάτω είναι απαραίτητο αυτό το αρχείο κεφαλίδα.

va_listΕπεξεργασία

Χρειάζεστε μια μεταβλητή τύπου va_list δηλωμένη, για παράδειγμα:

va_list arguments;

va_start, va_endΕπεξεργασία

Αυτές οι δύο μακροεντολές/συναρτήσεις είναι απαραίτητες. Τις χρησιμοποιείτε έτσι:

va_start(arguments, n);
/* Χρήση των παραμέτρων */
va_end(arguments);

va_argΕπεξεργασία

Αυτή σου δίνει την επόμενη παράμετρο που δεν έχεις διαβάσει ακόμα. Δε μπορεί να καταλάβει τι τύπου είναι όμως, πρέπει εμείς να της το πούμε:

sum += va_arg(arguments, int);

ΠαράδειγμαΕπεξεργασία

Χρησιμοποιώντας όλα τα παραπάνω, μπορούμε να φτιάξουμε μια συνάρτηση που αρθρήζει όλους τους ακεραίους που θα της δώσουμε, έτσι:

int makeSum(int n, ...)
{
    va_list arguments;
    int i, sum = 0;
    
    va_start(arguments, n);
    for (i = 0; i < n; ++i) {
        sum += va_arg(arguments, int);
    }
    va_end(arguments);
    
    return sum;
}

Αυτός φυσικά δεν είναι ο μόνος τρόπος χρήσης. Οι printf/scanf/κτλ παίρνουν σαν πρώτη παράμετρο ένα αλφαριθμητικό που καθορίζει πώς θα εκτυπωθούν οι πληροφορίες, και μέσω αυτού καταλαβαίνει πόσες επιπλέον παραμέτρους του έχουμε δώσει.

Happy coding!