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