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

Πρόταση για δημιουργία C FAQ subforum


FrAcTaL-gR

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

Δημοσ.

Η C είναι μια αρκετά διαδεδομένη γλώσσα προγραμματισμού. Απορίες για την χρήση της προκύπτουν συνέχεια. Ετσι, λοιπόν, προτείνω τη δημιουργία subforum όπου να τίθενται και να απαντώνται σε ξεχωριστά threads οι ερωτήσεις. 'Ετσι θα είναι χρήσιμες και σε μελλοντικούς αναγνώστες.

 

Επισημαίνω το thread με τις FAQ της Java, το οποίο είναι πλέον δύσχρηστο, καθώς είναι τεράστιο, και δύσκολα κάποιος μπορεί να βρεί κάτι που να τον ενδιαφέρει.

 

Ας ακούσουμε και τις γνώμες των υπευθύνων, και των μελών του forum. Για αρχή, θα σας παραθέσω στη συνέχεια μια εισαγωγή στη γλώσσα C, από τη wikipedia. Αν τελικά το subforum δημιουργηθεί, τότε μπορεί το επόμενο post να είναι το 1ο.

Δημοσ.

Η C είναι μια γενικής χρήσης διαδικαστική γλώσσα προγραμματισμού η οποία αναπτύχτηκε στις αρχές της δεκαετίας 1970-1980 από τον Dennis Richie στα εργαστήρια Bell Labs για να χρησιμοποιηθεί για την ανάπτυξη του λειτουργικού συστήματος UNIX. Απο τότε χρησιμοποιείται ευρύτατα, και ιδιαίτερα για ανάπτυξη προγραμμάτων συστήματος (system software) αλλα και για απλές εφαρμογές. Οι λόγοι της ραγδαίας ανάπτυξης της συγκεκριμένης γλώσσας προγραμματισμού είναι η ταχύτητα της, καθώς και το γεγονός ότι είναι διαθέσιμη στα περισσότερα σημερινά λειτουργικά συστήματα.

 

Φιλοσοφία

 

Η C είναι μια σχετικά μινιμαλιστική γλώσσα προγραμματισμού. Ανάμεσα στους σχεδιαστικούς στόχους που έπρεπε να καλύψει η γλώσσα περιλαμβανόταν το ότι θα μπορούσε να μεταγλωττιστεί (να γίνεται compile) άμεσα με τη χρήση single-pass compiler — με άλλα λόγια, ότι θα απαιτούνταν μόνο ένας μικρός αριθμός από εντολές (instructions) σε γλώσσα μηχανής (machine language) για κάθε βασικό στοιχείο της, χωρίς εκτεταμένη run-time υποστήριξη. Ως αποτέλεσμα, είναι δυνατό να γραφτεί κώδικας σε C σε low level επίπεδο προγραμματισμού με ακρίβεια ανάλογη της συμβολικής γλώσσας , στην πραγματικότητα η C ορισμένες φορές αποκαλείται (και χωρίς να υπάρχει πάντα αντιπαράθεση) "high-level assembly" ή "portable assembly." Επίσης, γίνονται αναφορές στη C ως mid-level γλώσσα προγραμματισμού.

 

Ιστορία

 

Πρώιμη ανάπτυξη

 

Σε πρώτη φάση,η C αναπτύχθηκε στα AT&T Bell Labs ανάμεσα στο 1969 και το 1973, σύμφωνα με τον D. Ritchie, η πιο δημιουργική περίοδος υπήρξε το 1972. Η νέα γλώσσα ονομάστηκε "C" λόγω του ότι πολλά από τα χαρακτηριστικά της προήλθαν από μια παλαιότερη γλώσσα, η οποία ονομαζόταν "B". Οι πηγές δεν επιτρέπουν την πλήρη εξακρίβωση για την προέλευση του ονόματος "B" : ο Ken Thompson το παρουσιάζει ως απλούστευση μιας έκδοσης της γλώσσας προγραμματισμού BCPL, αλλά είχε επίσης δημιουργήσει μία γλώσσα που ονομαζόταν Bon προς τιμήν της συζύγου του Bonnie.

 

Μέχρι το 1973, η C είχε γίνει αρκετά ισχυρή και αποτελεσματική, ώστε το μεγαλύτερο μέρος του πυρήνα του UNIX (UNIX kernel), γραμμένο αρχικά σε PDP-11/20 assembly, επανεγγράφηκε σε C. Ήταν ένας από τους πρώτους πυρήνες που υλοποιήθηκε σε μια γλώσσα διαφορετική της assembly. (Προηγούμενα παραδείγματα περιλαμβάνουν το Multics system (γραμμένο σε PL/I), και το MCP (Master Control Program) για το Burroughs B5000 γραμμένο σε ALGOL το 1961.)

 

K&R C (η "παλιά")

 

Το 1978, ο Dennis Ritchie και ο Brian Kernighan δημοσίευσαν την πρώτη έκδοση του "The C Programming Language". Το συγκεκριμένο βιβλίο, γνωστό στους προγραμματιστές της C ως "K&R", χρησίμευσε πολλά χρόνια ως ένας ανεπίσημος ορισμός της γλώσσας. Η έκδοση της C που περιγράφει αναφέρεται συνήθως ως "K&R C." ή "Common C". (Η δεύτερη έκδοση του βιβλίου καλύπτει το μεταγενέστερο πρότυπο ANSI για τη C (ANSI C standard), βλ. συνέχεια.)

 

Το K&R εισήγαγε τα παρακάτω χαρακτηριστικά στη γλώσσα:

 

* struct data types

* long int data type

* unsigned int data type

* Ο τελεστής (operator) =+ αλλάχθηκε σε += για να αφαιρεθεί η αμφισβήτηση σημαντικότητας (semantic ambiguity) που δημιουργούνταν με κατασκευές όπως i=+10, που μπορούσε να μεταφραστεί είτε i =+ 10 είτε i = +10.

 

 

H K&R C συχνά λογίζεται ως το βασικό μέρος της γλώσσας που πρέπει να υποστηρίζει ένας C compiler. Για αρκετά χρόνια, ακόμη και μετά την εισαγωγή της ANSI C, θεωρούνταν ο "ελάχιστος συνήθης παρονομαστής" στον οποίο έπρεπε να προσαρμοστούν οι προγραμματιστές της C σε περιπτώσεις κατά τις οποίες ήταν επιθυμητή η μέγιστη μεταφερσιμότητα (portability), καθώς δεν είχε γίνει ενημέρωση (update) σε όλους τους compilers για πλήρη υποστήριξη της ANSI C, και διότι με προσοχή, ο κώδικας σε K&R C μπορούσε να γραφεί ώστε να είναι σύμφωνος και με το πρότυπο ANSI.

 

ANSI C (η σημερινή)

 

Το 1983, το American National Standards Institute (ANSI) όρισε επιτροπή, τη X3J11, για να δώσει ένα σύγχρονο, πλήρη ορισμό της C. Μετά από μακρά και επίπονη επεξεργασία, το πρότυπο (standard) ολοκληρώθηκε το 1989 και επικυρώθηκε ως as ANSI X3.159-1989 "Programming Language C." Η συγκεκριμένη έκδοση της γλώσσας ονομάζεται συχνά ANSI C, ή ορισμένες φορές C89 (για να διαχωρίζεται από τη C99).

 

Το 1990, το πρότυπο ANSI για τη C (με ορισμένες μικρές τροποποιήσεις) υιοθετήθηκε από τον Οργανισμό Διεθνών Προτύπων (International Organization for Standardization (ISO)) ως ISO/IEC 9899:1990. Αυτή η έκδοση καλείται C90. Επομένως, οι όροι "C89" και "C90" αναφέρονται ουσιαστικά στην ίδια γλώσσα.

 

Ένας από τους στόχους της διαδικασίας δημιουργίας του προτύπου ANSI για τη C ήταν να δημιουργήσει ένα υπερσύνολο της K&R C, το οποίο θα απορροφούσε πολλά χαρακτηριστικά που είχαν εισαχθεί στην πορεία. Παρόλα αυτά, η επιτροπή συμπεριέλαβε και ορισμένα νέα χαρακτηριστικά, όπως function prototypes (δανεισμένα από τη C++), και ένα πιο ικανό προεπεξεργαστή (preprocessor). Η σύνταξη για τους ορισμούς παραμέτρων άλλαξε επίσης, ώστε να αντικατοπτρίζει το στυλ της C++.

 

C99 (το μέλλον??)

Μετά τη διαδικασία καθορισμού του προτύπου ANSI, ο ορισμός της γλώσσας C παρέμενε σχετικά σταθερός για ορισμένο καιρό, ενώ η C++ συνέχιζε να αναπτύσσεται. (Normative Amendment 1 δημιούργησε μία νέα έκδοση της γλώσσας C το 1995, αλλά σπάνια είναι γνωστή.) Ωστόσο, το πρότυπο επανεξετάστηκε προς το τέλος της δεκαετίας του '90, γεγονός που οδήγησε στην έκδοση του ISO 9899:1999 το 1999. Το πρότυπο αυτό συχνά αναφέρεται ως "C99". Υιοθετήθηκε ως πρότυπο ANSI το Μάρτιο του 2000.

 

Ο GCC και μερικοί άλλοι C compilers υποστηρίζουν πλέον τα περισσότερα χαρακτηριστικά του C99. Ωστόσο, υπάρχει μικρότερη υποστήριξη από εταιρίες όπως η Microsoft και η Borland που εστίασαν περισσότερο στη C++, καθώς η C++ παρέχει παρόμοια λειτουργικότητα και συχνά ασύμβατους τρόπους (π.χ., η complex template class). Ο Brandon Bray από τη Microsoft είπε "Σε γενικές γραμμές, έχουμε δει μικρές απαιτήσεις για πολλά χαρακτηριστικά του C99. Μερικά χαρακτηριστικά έχουν μεγαλύτερη ζήτηση από άλλα, και θα τη λάβουμε υπόψιν μας σε μελλοντικές releases εφόσον είναι συμβατά με τη C++."

 

Ακόμη και ο GCC με την εκτεταμένη υποστήριξη του C99 ακόμη δεν προσεγγίζει μια καθ'όλα συμβατή υλοποίηση, ορισμένα χαρακτηριστικά-κλειδιά λείπουν ή δεν λειτουργούν σωστά.

Δημοσ.

Συγχαρητήρια για την ιδέα σου, επαυξάνω και επικροτώ την ιδέα αυτή για την δημιουργία ξεχωριστού τμήματος για την C/C++ καθώς πολλά άτομα εδώ μέσα έχουν βοηθήσει με πολλές γραμμές κώδικα άλλα άτομα και έχουν γράψει τόσα πολλά που θα μπορούσαν να βοηθήσουν τους μελλοντικούς προβληματισμούς μας στην κατασκευή προγραμμάτων - console aplications και όχι μόνο. Προσωπικά θα βοηθήσω και θα στηρίξω την προσπάθεια αυτή όσο μπορώ με τις γνώσεις που έχω και θα αποκτήσω μέσα από την διαδικασία αυτή.

Εδώ είμαστε,

Bokarinho.

Δημοσ.

Βέβαια, κάποιος μπορεί να πει "μα υπάρχουν άπειρα sites με faq στα οποία μπορεί να ανατρέξει κανείς". Σωστά, αλλά είναι ΟΛΑ sites του εξωτερικού. Δεν έχω δει κάποια τέτοια προσπάθεια στη χώρα μας (ίσως να μην έψαξα αρκετά, βέβαια).

 

Επίσης ανταλάσσοντας απόψεις για προβλήματα που προκύπτουν κατά τη συγγραφή των προγραμμάτων μπορούμε να βελτιωνόμαστε και οι ίδιοι.

 

Να συμπληρώσω πως σαν FAQ θεωρώ μια ερώτηση που έχει τεθεί σε γενικό επίπεδο και όχι μια ερώτηση που αφορά κάποιο συγκεκριμένο κομμάτι κώδικα.

Δηλαδή, κατά την γνώμη μου FAQ θα μπορούσε να είναι μια ερώτηση του στυλ "Να κάνουμε type casting στην επιστρεφόμενη τιμή της malloc ή όχι;"

 

Δεν θεωρώ FAQ μια ερώτηση του στύλ:

 

>
#include <stdio.h>
int main(void)
{
    bla bla bla

    return 0;
}

 

Πείτε μου παρακαλώ, γιατί δεν "τρέχει" το πρόγραμμα;

 

Θα έχει ενδιαφέρον να ακουστούν όσο το δυνατόν πιο πολλές απόψεις. Και φυσικά μπορεί να γίνει ξεχωριστό section για την C++, όπως επισήμανε ο bokarinho

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

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

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