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