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