Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 29 Μαρ 2012, 18:00

Κοίτα τώρα τι παίζει με τις re-usable (btw, υπάρχει κι άλλη εξήγηση του όρου αυτού... εκείνη αναφέρεται στην ικανότητα της συνάρτησης να περαστεί ως όρισμα σε άλλη συνάρτηση)... άμα σου πει κάνας"εξυπνάκιας" (συνήθως αρχάριοι ή φανατικοί είναι αυτοί) τίποτα του τύπου "για δείξε μας ρε φίλε έναν τρόπο να διαβάσεις με C έναν int χωρίς να κρασάρει σε bad-input", μπορείς να του απαντάς...

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include "myextras.h"
int main( void )
{
int n = readInt();
...
}

:lol: :lol:

Μου έχει τύχει "άπειρες" φορές :lol:

Βέβαια, ακόμα καλύτερα είναι όταν αυτό που σε ρωτάνε υπάρχει υλοποιημένο ήδη σε κάποια έτοιμη (δημοφιλή ή όχι) εξωτερική βιβλιοθήκη, οπότε απαντάς...

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include "libname.h"
...

Εννοώντας φυσικά πως στην πράξη και με τη C μπορείς κάλλιστα να είσαι παραγωγικός ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 30 Μαρ 2012, 11:04

migf1 έγραψε:
... (btw, υπάρχει κι άλλη εξήγηση του όρου αυτού... εκείνη αναφέρεται στην ικανότητα της συνάρτησης να περαστεί ως όρισμα σε άλλη συνάρτηση)...

Κι ένα παράδειγμα για το παραπάνω, για να μην μένει "αιωρούμενο"...

Not ReUsable...
Μορφοποιημένος Κώδικας: Επιλογή όλων
void s_toupper( char *s )
{
if ( !s )
return NULL;

for (char *cp=s; *cp; cp++)
*cp = (char)toupper( (int)(*cp) );

return;
}


ReUsable...
Μορφοποιημένος Κώδικας: Επιλογή όλων
char *s_toupper( char *s )
{
if ( !s )
return NULL;

for (char *cp=s; *cp; cp++)
*cp = (char)toupper( (int)(*cp) );

return s;
}

Με την προϋπόθεση πως έχουμε εξασφαλίσει από από πριν πως το mystr ΔΕΝ είναι NULL, τότε με τη 2η μπορούμε να γράψουμε απευθείας...

Μορφοποιημένος Κώδικας: Επιλογή όλων
puts( s_toupper(mystr) );

Με την 1η πρέπει να σπάσει υποχρεωτικά σε 2 γραμμές...

Μορφοποιημένος Κώδικας: Επιλογή όλων
s_toupper( mystr );
puts( mystr );
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 31 Μαρ 2012, 15:38

Ζει κανείς εδώ; :lol:
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 01 Απρ 2012, 00:43

migf1 έγραψε:Ζει κανείς εδώ; :lol:

Παρών.
Τελείωσα τα κεφάλαια 14 και 15 (the preprocessor και dividing a program into files).

Μια απορία.
Η τεκμηρίωση των συναρτήσεων συνηθίζεται να μπαίνει στα header files ή στα source files;
Επίσης δεν είμαι σίγουρος για το αν κατάλαβα τι ακριβώς κάνει ο linker.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 01 Απρ 2012, 10:39

Ilias95 έγραψε:
migf1 έγραψε:Ζει κανείς εδώ; :lol:

Παρών.
Τελείωσα τα κεφάλαια 14 και 15 (the preprocessor και dividing a program into files).

Μια απορία.
Η τεκμηρίωση των συναρτήσεων συνηθίζεται να μπαίνει στα header files ή στα source files;
Επίσης δεν είμαι σίγουρος για το αν κατάλαβα τι ακριβώς κάνει ο linker.

Καλημέρα,

H τεκμηρίωση συνηθίζεται να μπαίνει ακριβώς πάνω από τον ορισμό της συνάρτησης (υπάρχουν και εργαλεία αυτόματης παραγωγής κανονικής τεκμηρίωσης, παραγόμενης από τα σχόλια, όπως το Doxygen... θέλουν όμως ειδική σύνταξη... μπορείς να δεις ως παράδειγμα τα σχόλια στον κώδικα της prompt_for() )

O linker ενώνει τα .o αρχεία που παράγει ο compiler για κάθε σου .c αρχείο, μαζί με τα αντίστοιχα αρχεία των βιβλιοθηκών που χρησιμοποιείς (στάνταρ ή μη) και παράγει το τελικό, εκτελέσιμο αρχείο του προγράματός σου.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 01 Απρ 2012, 12:38

migf1 έγραψε:H τεκμηρίωση συνηθίζεται να μπαίνει ακριβώς πάνω από τον ορισμό της συνάρτησης

Αν δεις το πρόγραμμα-παράδειγμα που αναλύει ο King στο κεφάλαιο 15, γράφει τις συναρτήσεις σε ένα αρχείο line.c και μετά σε ένα header file ονόματι line.h δηλώνει τα prototypes των συναρτήσεων και από πάνω γράφει την τεκμηρίωση.

Είναι "σωστή" αυτή η τακτική;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 01 Απρ 2012, 13:50

Ilias95 έγραψε:
...
Είναι "σωστή" αυτή η τακτική;

Κι αυτή σωστή είναι, αλλά συνηθίζεται στις βιβλιοθήκες. Αν δηλαδή φτιάξεις μια βιβλιοθήκη και δεν θέλεις να διαθέσεις τον κώδικά της, αλλά μόνο τα .o αρχεία της (τα οποία συνήθως δεν τα δίνεις χύμα, αλλά τα κάνεις archived σε ένα αρχείο .a) τότε είναι χρήσιμο η τεκμηρίωση των συναρτήσεων της βιβλιοθήκης να περιέχεται στο header file της βιβλιοθήκης, στις δηλώσεις δηλαδή των συναρτήσεων (και όχι στους ορισμούς τους, στα .c αρχεία).

Το header-file της βιβλιοθήκης θα το διαθέσεις έτσι κι αλλιώς, για να μπορούν να το κάνουν #include όσοι θέλουν να χρησιμοποιήσουν τις συναρτήσεις της βιβλιοθήκης.

Αυτό είναι το λεγόμενο data-hiding ή encapsulation, όπου δηλαδή διαθέτεις δημόσια τις δηλώσεις των συναρτήσεων μαζί με την τεκμηρίωσή τους, αλλά οι υλοποιήσεις των συναρτήσεων (οι ορισμοί δλδ) είναι private στα .o αρχεία της βιβλιοθήκης (αυτά ουσιαστικά έχουν την μορφή που έχουν και τα εκτελέσιμα αρχεία, χωρίς όμως το αρχικό τμήμα που θα τα χαρακτήριζε ως κανονικό εκτελέσιμα... τα εκτελέσιμα έχουν ένα platform dependent header στην αρχή τους, το οποίο αν το βρει το OS θεωρεί πως το εν λόγω αρχείο είναι εκτελέσιμο και το τρέχει).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 01 Απρ 2012, 13:58

Καλώς.
Έχεις μήπως να προτείνεις κάποια καλή άσκηση πριν πάω σε Structures, Unions, Enumerations;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 01 Απρ 2012, 14:03

Ilias95 έγραψε:Καλώς.
Έχεις μήπως να προτείνεις κάποια καλή άσκηση πριν πάω σε Structures, Unions, Enumerations;

Τα struct/union & enums, μαζί με τους pointers και τον pre-processor είναι η πεμπτουσία του High-Level programming στη C :)

Άσκηση για ποιο πράγμα εννοείς;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 01 Απρ 2012, 14:09

migf1 έγραψε:Άσκηση για ποιο πράγμα εννοείς;

Κάποια όμορφη-πρακτική άσκηση που να συνδυάζει όσα έχουν διδαχθεί στα πρώτα 15 κεφάλαια, για να σιγουρευτώ ότι έχω κατανοήσει όσα έχω δει ως τώρα πριν πάω παρακάτω. Ή καλύτερα να δω πρώτα structures, δυναμική διαχείριση μνήμης κα;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron