Προς το περιεχόμενο

Complicated C declarations


Επισκέπτης

Προτεινόμενες αναρτήσεις

Δημοσ.

Mporei kapoios na mou eksigisei ti akribos kanoun ta parakatw declarations kai ena paradeigma gia to pws mporw na ta xrisimopoihsw? (Apo to biblio The C programming language Ritchie & kernighan)

 

1)

char (*(*x())[])()

 

2)

char (*(*x[3])())[5]

 

 

To cdecl mou vgazei ta ekshs:

 

cdecl> explain char (*(*x())[])()

declare x as function returning pointer to array of pointer to function returning char

cdecl> explain char (*(*x[3])())[5]

declare x as array 3 of pointer to function returning pointer to array 5 of char

 

Alla eksakolou8w na min polukatalabainw pws mporoun na xrhsimopoih8oun sthn praksi..

 

Euxaristw

Δημοσ.

declare x as function returning pointer to array of pointer to function returning char

 

Alla eksakolou8w na min polukatalabainw pws mporoun na xrhsimopoih8oun sthn praksi..

 

Πλάκα κάνεις, έτσι; !!!

Αυτά είναι παραδείγματα για να μην έχεις πρόβλημα κατανόησης δύσκολης σύνταξης, όχι για να τα χρησιμοποιήσεις...

 

ΟΚ, ας προσπαθήσω να δώσω ένα σενάριο που να μπορεί να χρησιμοποιηθεί το πρώτο: (εδώ γελάμε)

Θες να διαβάσεις ένα χαρακτήρα από κάποια τερματικά. Κάθε τερματικό έχει διαφορετικό interface, και άρα χρειάζεται ξεχωριστή συνάρτηση. Επομένως χρειάζεσαι μια σειρά από συναρτήσεις, μία για κάθε τερματικό, που να σου επιστρέφουν ένα χαρακτήρα.

 

Ως εδώ έχεις το array of pointer to function returning char.

 

Όμως κάθε χρήστης που έχει συνδεθεί με το μηχάνημα έχει δικαιώματα πρόσβασης σε διαφορετικά τερματικά. Επομένως χρειάζεσαι μια συνάρτηση η οποία θα ελέγχει τα credentials του χρήστη, θα κοιτάει σε ποια τερματικά έχει πρόσβαση, και θα επιστρέφει το σχετικό πινακάκι.

 

Επομένως αυτή η συνάρτηση επιστρέφει array με συναρτήσεις διαβάσματος χαρακτήρα για κάθε τερματικό που ο χρήστης έχει δικαιώματα πρόσβασης, κι αυτό χρειάζεται την πρώτη δήλωση που σου έδωσε το cdecl.

 

Ε, άμα φτάσεις σε τέτοιο πρόβλημα, πιστεύω θα αρκεστείς σε if/switch κτλ.

Δημοσ.

Είναι ασκήσεις απλώς για να σου δείξουν πόσο περίπλοκες μπορούν να γίνουν οι δηλώσεις. Και πιθανώς να σε αποτρέψουν να χρησιμοποιείς τέτοιες κατασκευές.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...