Η 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!