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