Συντάκτης άρθρου:Darth Cotsos
Μάθημα 2ο
Πριν αρχίσουμε το δεύτερο μάθημα να πω για ένα bug του Z88dk. Όταν γράψετε το listing σας μετά το τέλος πατήστε 2 - 3 φορές enter και μετά σώστε το. Αυτό γίνετε γιατί αν πχ στο πρώτο listing που γράψαμε το αρχείο τελείωνε στο } τότε ο compiler βγάζει το μήνυμα λάθους 'unexpected end of file' και δεν προχωρά στη μεταγλώττιση.
Αντίθετα αν το αρχείο τελειώνει
1 - 2 γραμμές παρακάτω τότε το compile γίνετε κανονικά!!!
Στο δεύτερο μάθημα θα αναφερθώ στους control χαρακτήρες, τους τελεστές, στις εντολές του προ επεξεργαστή, στις δεσμευμένες λέξεις της C και τις βασικές βιβλιοθήκες της C καθώς και στις συναρτήσεις που περιέχουν!!!
Control χαρακτήρες
Είδαμε στο πρόγραμμα που γράψαμε στο 1ο μάθημα τον control χαρακτήρα \n μετά το "silogomania.com". Όπως ανέφερα αυτό αναγκάζει τον κέρσορα να πάει σε νέα γραμμή. Υπάρχουν όμως και άλλοι control χαρακτήρες για άλλες λειτουργίες. Αυτοί είναι:
\a χαρακτήρας προειδοποίησης (beep)
\b backspase
\f αλλαγή σελίδας
\n νέα γραμμή
\r επαναφορά κεφαλής
\t TAB
\v κατακόρυφο TAB
\0 NULL χαρακτήρας
\\ ανάποδη κάθετος
\? λατινικό ερωτηματικό
\' μονό εισαγωγικό
\" διπλό εισαγωγικό
\οοο οκταδικός αριθμός
\xhhh δεκαεξαδικός αριθμός.
Εντολές προ επεξεργαστή
Επίσης είδαμε και μία εντολή του προεπεξεργαστή που αφορά την ενσωμάτωση των βασικών βιβλιοθηκών της C αλλά και βιβλιοθηκών που μπορεί να έχει δημιουργήσει ο χρήστης.
Η εντολή #include για βιβλιοθήκες του χρήστη ενδέχεται σε κάποιους compilers να δίνετε ως:
#include "c:\mylibs\mylib.h"
δηλαδή με " " διπλά εισαγωγικά και όχι με <>!!!
Έτσι για να συνοψίσουμε τις εντολές του προεπεξεργαστή έχουμε:
#include -> ενσωμάτωση αρχείων βιβλιοθηκών.
#define -> ορισμός σταθερών και macros
π.χ. #define PI 3.14 (ορισμός σταθερής)
#define MAX (A,B) ((A)>(B) ? (A) : (B)) (macro που δίνει τον max)
#undef -> αναιρείτε ένας ορισμός!!!
#if, #else, #elif, #endif -> υποθετική εκτέλεση
#ifdef, #ifndef -> Αν είναι ορισμένη ή όχι κάποια σταθερά ή makro.
defined(name) -> Επιστρέφει true εάν έχει οριστεί το (name).
Βέβαια τα παραπάνω είναι μια απλή αναφορά και τους ορισμούς (κυρίως κάποιων σταθερών) θα τους καταλάβετε σε επόμενα μαθήματα όπου θα μπουν κάποια παραδείγματα. Θα προσπαθήσω Ωστόσο να ψάξω και στο διαδίκτυο να βρω απλά παραδείγματα που να αφορούν τις εντολές του προεπεξεργαστή για να σας παραθέσω καλύτερα τη χρήση τους.
Τελεστές αριθμητικών και μη πράξεων καθώς και σύγκρισης
Στη C όταν θέλουμε σε ένα μετρητή να τον αυξήσουμε ή να τον μειώσουμε κατά μία μονάδα δεν γράφουμε
x=x+1; ή x=x-1; (οπού και αυτό είναι σωστό) αλλά x++ ή x--
Έτσι συνοπτικά για τους τελεστές βάση προτεραιότητας έχουμε:
++, -- -> Τελεστής αύξησης και μείωσης.
+, -, !, ~ -> Μοναδιαίο συν, μοναδιαίο πλην, λογική άρνηση (not), άρνηση δυαδικών ψηφίων.
*pointer, &name -> Ανακατεύθυνση μέσω δείκτη, διεύθυνση ενός αντικειμένου.
(type) expr -> Ανάθεση έκφρασής σε τύπο.
size of -> Μέγεθος ενός αντικειμένου.
*, /, % -> Πολλαπλασιασμός, διαίρεση, υπόλοιπο ακέραιας διαίρεσης.
+, - -> Πρόσθεση, αφαίρεση.
<<, >> -> Αριστερή μετατόπιση, δεξιά μετατόπιση.
<, <=, >, >= -> Μικρότερο από, μικρότερο ίσο από, μεγαλύτερο από, μεγαλύτερο ίσο από.
==, != -> Ίσο με, διάφορο.
& -> Και δυαδικών ψηφίων.
^ ->Αποκλειστικό ή δυαδικών ψηφίων.
| -> ή δυαδικών ψηφίων.
&& -> Λογικό και
|| -> Λογικό ή
? : -> τελεστές συνθήκης. expr1 ? expr2 : expr3
=, +=, -=, *=, /=, %=, <=, >=, &=, |=, ^= -> Τελεστές καταχώρησης: καταχώρηση, καταχώρηση αθροίσματος, καταχώριση διαφοράς, καταχώρηση γινομένου, διαίρεσης, υπολοίπου, αριστερής μετατόπισης, δεξιάς μετατόπισης, καταχώριση και, καταχώριση ή, καταχώριση αποκλειστικού ή.
Δεσμευμένες λέξεις της C
Οι παρακάτω λέξεις είναι δεσμευμένες στη C και δεν επιτρέπεται να χρησιμοποιηθούν ως ονόματα μεταβλητών που έχουν ορισθεί από τον προγραμματιστή:
asm, auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, size of, static, struct, switch, typedef, union, unsigned, void, volatile, while.
Οι βασικές βιβλιοθήκες της ANSI C
Εδώ θα παραθέσω τις βασικότερες βιβλιοθήκες της C. Υπάρχουν και άλλες αλλά θα αναφερθώ σε αυτές που χρησιμοποιούνται περισσότερο. Υπάρχουν επίσης και βιβλιοθήκες που αφορούν τα ξεχωριστά χαρακτηριστικά του κάθε 8bit μηχανήματος που μας ενδιαφέρει.
Άλλα ας δούμε τις βασικότερες συναρτήσεις της C καθώς και τις συναρτήσεις του περιεχέι η κάθε μία.
ctype.h
Η βιβλιοθήκη περιέχει συναρτήσεις που αφορούν χαρακτήρες έτσι έχουμε (όπου c ένας χαρακτήρας):
isalnum© -> αν είναι αλφαριθμητικός
isalpha© -> αν είναι αλφαβητικός
iscntrl© -> αν είναι control χαρακτήρας
isdigit© -> αν είναι ψηφίο (0 - 9)
isgraph© -> αν είναι εκτυπώσιμος χαρακτήρας μη συμπεριλαμβανομένου του κενού (space)
islower© -> αν είναι πεζός
isprint© -> αν είναι εκτυπώσιμος συμπεριλαμβανομένου του κενού (space)
ispunct© -> αν είναι εκτυπώσιμος εκτός space, αλφαβητικών και αριθμητικών
isspace© -> αν είναι space, form feed, newline, cr, tab, vtab
isupper© -> αν είναι κεφαλαίος
isxdigit© -> αν είναι δεκαεξαδικός
tolower© -> μετατρέπει τον κεφαλαίο χαρακτήρα σε πεζό
toupper© -> μετατρέπει τον πεζό χαρακτήρα σε κεφαλαίο
string.h
Αυτή η βιβλιοθήκη αυτή περιέχει συναρτήσεις που αφορούν string.
strlen(s) -> επιστρέφει το μήκος του string s
strcpy(s,ct) -> αντιγράφει το string ct στο sting s. Το s θα πρέπει να είναι μεγαλήτερο το ct για να χωρέσει το ct.
strncpy(s,ct,n) -> το ίδιο με το strncpy μόνο που εδώ αντιγράφει μέχρι n χαρακτήρες.
strcat(s,ct) -> ενσωματώνει το string ct μετά το string s
strncat(s,ct,n) -> ενσωματώνει n χαρακτήρες από το sting ct στο string s
strcmp(s,ct) -> συγκρίνει τα δυο string s και ct
strncmp(s,ct,n) -> συγκρίνει τους πρώτους n χαρακτήρες από τα δύο string
strchr(s,c) -> επιστρέφει τη θέση που θα βρεθεί ο πρώτος χαρακτήρας c στο string s
strrchr(s,c) -> επιστρέφει την τελευταία θέση του χαρακτήρα μέσα στο string s
stdio.h
Πρόκειτε για την βασική βιβλιοθήκη με συναρτήσεις εισόδου - εξόδου της C
stdin, stdout, strerr -> επιστρέφουν τις standard εισόδους και εξόδους καθώς και τις εξόδους error.
Αν δεν έχουν οριστεί διαφορετικά τότε ως standard είσοδος είναι ορισμένο το πληκτρολόγιο και έξοδος η οθόνη.
EOF -> επιστρέφει το τέλος αρχείου (End Of File)
getchar() -> δέχεται έναν χαρακτήρα από το πληκτρολόγιο
putchar© -> τυπώνει τον χαρακτήρα c
printf("format",arg1,...) -> τυπώνει δεδομένα στη standard έξοδο
scanf("format",&name1,...) -> διαβάζει δεδομένα από την standard είσοδο
gets(s,max) -> διαβάζει
puts(s) -> τυπώνει το string s
FILE *fp -> δήλωση ενός file pointer
fopen("name","mode") -> άνοιγμα ενός αρχείου. Όπου mode r για read, w για write και a για append
getc(fp) -> διάβασμα ενός χαρακτήρα από ένα αρχείο
putc(chr,fp) -> εγγραφή ενός χαρακτήρα σε ένα αρχείο
fprintf(fp,"format",arg1,...) -> εγγραφή δεδομένων σε ένα αρχείο
fscanf(fp,"format",arg1,...) -> διάβασμα δεδομένων από ένα αρχείο
fclose(fp) -> κλείσιμο ενός αρχείου
ferror(fp) -> επιστρέφει τον κωδικό λάθους από κάποια ενέργεια σε ένα αρχείο Ο κωδικός είναι 0 αν όλα είναι ΟΚ
feof(fp) -> επιστρέφει 0 αν δεν βρέθηκε τέλος αρχείου.
fgets(s,max,fp) -> διαβάζει
fputs(s,fp) -> εγγραφή του string s σε ένα αρχείο
stdlib.h
Είναι η standard βιβλιοθήκη της C και περιέχει συναρτήσεις "γενικών καθηκόντων"
abs(n) -> επιστρέφει την απόλυτη τιμή του ακέραιου n
div(n,d) -> επιστρέφει το υπόλοιπο της διαίρεσης των ακέραιων n και d
rand() -> επιστρέφει έναν ψευδοτυχαίο ακέραιο
exit(status) -> σταματά την εκτέλεση του προγράμματος
system(s) -> περνάει το sting s στο σύστημα για εκτέλεση
atof(s) -> μετατρέπει το string s σε double
atoi(s) -> μετατρέπει το string s σε integer
atol(s) -> μετατρέπει το string s σε long
malloc(size) -> δεσμεύει χώρο στη μνήμη.
realloc(pts,size) -> μεταβάλλει το δεσμευμένο χώρο ενός αντικειμένου
free(ptr) -> αποδεσμεύει χώρο
bsearch(key,array,n,size,cmp()) -> ψάχνει έναν πίνακα για συγκεκριμένο κλειδί
qsort(array,n,size,cmp()) -> ταξινόμηση ενός πίνακα κατά αύξουσα σειρά
math.h
H math όπως το λέει και το όνομα της είναι η βιβλιοθήκη των μαθηματικών συναρτήσεων της C
sin(x), cos(x), tan(x) -> Τριγωνομετρικές συναρτήσεις
asin(x), acos(x), atan(x) -> αντίστροφες τριγωνομετρικές συναρτήσεις
atan2(y,x) -> τόξο εφαπτομένης(y/x)
sinh(x), cosh(x), tanh(x) -> υπερβολικές τριγωνομετρικές συναρτήσεις
exp(x), log(x), log10(x) -> εκθετικές και λογαριθμικές συναρτήσεις
pow(x,y), sqrt(x) -> συναρτήσεις δυνάμεων και ρίζας
ceil(x), floor(x), fabs(x) -> συναρτήσεις στρογγυλοποίησης
Έκανα εδώ στο 2ο μάθημα μία μικρή αναφορά στις κυριότερες βιβλιοθήκες της C ώστε να υπάρχει μία αναφορά για την συνέχεια των άρθρων. Όσοι έχουν προηγούμενη εμπειρία με προγραμματισμό θα αναγνωρίσουν πολλές από τις συναρτήσεις αφού υπάρχουν σχεδόν αυτούσιες οι με παρόμοια ονόματα και σύνταξη και σε άλλες γλώσσες όπως πχ η Pascal.
Επαναλαμβάνω ότι αναφέρω τις βασικές βιβλιοθήκες και συναρτήσεις τους. Υπάρχουν περισσότερες βιβλιοθήκες και συναρτήσεις τις οποίες δεν έχω αναφέρει. Η προσπάθεια επικεντρώνετε στα βασικά της γλώσσας.
Από το επόμενο μάθημα θα αρχίσουμε να τα βάζουμε όλα αυτά μαζί και να φτιάχνουμε τα πρώτα προγράμματα.
- Δεν βρέθηκαν σχόλια
Σχόλια