Total Hack Cheat
Benvenuto/a su Total hack Cheat....
non aspettate altro tempo Registratevi!!

Parte 2 guida linguaggio C

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso

Parte 2 guida linguaggio C

Messaggio Da RaYoZ il Gio Mag 20, 2010 12:13 pm

Vediamo ora di trattare la sintassi del linguaggio includendo alcune funzioni che ritroviamo nelle librerie del compilatore Microsoft.
Il discorso, se sono stati seguiti i capitoli riguardanti la programmazione strutturata, sara' abbastanza semplice in quanto gran parte di quello che verra' trattato e' gia' stato visto in questi ultimi.
Il linguaggio C, come gia' accennato precedentemente, non possiede funzioni di I/O e quindi qualsiasi compito svolto deve essere eseguito mediante routine scritte con le poche parole chiave del linguaggio stesso.
Fortunatamente molte funzioni che assolvono compiti particolari le ritroviamo universalmente implementate all'interno delle librerie fornite con i vari compilatori.
I compilatori come il Microsoft ne possiedono centinaia anche se molte hanno lo svantaggio di rendere il programma hardware dipendente.
Nelle ultime versioni del compilatore sono state inserite molte funzioni comuni a quelle del sistema operativo Xenix.
Infatti anche in quest'ultimo ritroviamo un sistema di sviluppo per software in linguaggio C per ambiente MS DOS.
Per la creazione di alcune funzioni quali quelle riguardanti la gestione degli attributi video, il posizionamento del cursore e altre di questo tipo, possiamo utilizzare sequenze tipiche di escape.
Purtroppo anche queste rendono incompatibile il programma con altri sistemi non MS DOS.
D'altra parte lo scopo di questo volume non e' quello di mostrare la via per la scrittura di software portatile ma, al contrario, quello di insegnare il metodo di utilizzo e di sfruttamento delle risorse hardware del sistema MS DOS mediante l'utilizzo e la modifica di vettori di interruzione particolari di quest'ultimo.
E' questo particolarmente dedicato alle persone che sviluppano gia' software in ambiente Dos e che vogliono per motivi vari avvicinarsi alle tecniche di programmazione a basso livello senza necessariamente utilizzare linguaggi come l'assembler.
Il linguaggio C possiede in questo settore una notevole potenzialita' dimostrata dai numerosi pacchetti commerciali, quali Wordstar (tm), presenti in circolazione. Nato dall'esigenza di essere utilizzato dai soli ideatori, Dennis
M. Ritchie e Brian W. Kernigham, non possiede rigidezze sintattiche o semantiche.
Visto che siamo in argomento vi ricordo che la guida di riferimento del linguaggio e' quella scritta appunto da Kernigham e Ritchie intitolata "Linguaggio C" ed edita in Italia dal gruppo editoriale Jackson.



Organizzazione del compilatore

Una parte molto importante per acquisire le tecniche di programmazione in un certo linguaggio e' quella di disporre di una macchina e di un compilatore adatto per abituarsi a "parlare" con questo.
La cosa da fare prima di iniziare a compilare e' quella di organizzare i programmi e i files che compongono il vostro compilatore.
Il settaggio che vi proporro' e' relativo al Microsoft C Compiler che, come ho gia' detto, e' quello a cui mi riferiro' in questo testo.
Il sorgente del vostro programma verra' redato mediante un wordprocessor del tipo di Wordstar e verra' salvato come un normale testo ASCII.
Personalmente consiglio l'uso di una versione per MS DOS di un editor di Unix e precisamente VI in quanto possiede funzioni abbastanza utili per i controlli dei bilanciamenti delle parentesi e altre funzioni utili per la redazione di programmi in linguaggio C.
Una volta redato il programma in sorgente ASCII bisogna creare mediante il compilatore il codice rilocabile.
Questo si esegue mediante MSC.EXE oppure con CL.EXE.Vedremo avanti gli switch che potremo utilizzare con questi per ottenere funzioni quali l'ottimizzazione del codice in funzione dello spazio oppure del tempo di esecuzione e per altre opzioni.
Il compilatore viene fornito con molte funzioni in libreria che noi potremo richiamare dai nostri programmi.
Il codice oggetto (file .OBJ) non e' eseguibile in quanto necessita per esserlo del collegamento con le funzioni in libreria che esso richiama.
Questa funzione viene svolta dal linker. Se nella compilazione abbiamo utilizzato CL questa fase e' eseguita automaticamente da questo.
L'unico comando che dovremo dare e'

C> CL NOMEFILE.C

Nel caso invece che abbiamo utilizzato MSC con il comando

C> MSC NOMEFILE.C

dovremo ancora eseguire la fase di link con

C> LINK NOMEFILE.OBJ;

La disposizione dei vari files dipende dalla configurazione hardware di cui disponete.
Potreste avere due floppy da 360Kbytes oppure un hard disk.
Vediamo ora il primo caso.


Dischetto 1

Create una directory con un nome qualsiasi con il comando DOS md ad esempio \BIN e disponetegli dentro i seguenti files.

MSC.EXE P0.EXE P1.EXE P2.EXE P3.EXE

Se preferite utilizzare CL al posto di MSC sostituite quest'ultimo con il primo.
Ora create un' altra directory con il nome che preferite ad esempio \HEADER.
All'interno di questa andranno i files che seguono.

ASSERT.H CONIO.H CTYPE.H DIRECT.H
DOS.H ERRNO.H FCNTL.H IO.H
MALLOC.H MATH.H MEMORY.H PROCESS.H
SEARCH.H SETJMP.H SHARE.H SIGNAL.H
STDIO.H STDLIB.H STRING.H TIME.H

Ora internamente alla directory \HEADER o come l'avete chiamata
createne un'altra con nome \SYS.
In questa metteteci

LOCKING.H STAT.H TIMEB.H TYPES.H



Dischetto 2

Create anche in questo una directory con lo stesso nome di quella presente sul dischetto 1 in cui avete inserito i file eseguibili del compilatore.
Inserite in questa

LINK.EXE

Un' altra directory in questo dischetto dovra' contenere i files della libreria che intendete utilizzare in funzione al modello di memoria che desiderate, ad esempio \LIB.
Per ora supponiamo che vogliate quello definito SMALL. Inserite i files relativi alle librerie di quest' ultimo e cioe'

SLIBC.LIB SLIBFP.LIB EM.LIB

Dopo aver eseguito questa sistemazione dovrete creare un file batch in cui inserirete le seguenti istruzioni che hanno lo scopo , mediante il settaggio del path e di alcune variabili di sistema, di informare il compilatore sul percorso da seguire per trovare i files necessari all'esecuzione del suo compito.
Potete utilizzare per la redazione del .BAT il comando DOS copy con nel seguente modo.


B>COPY CON START.BAT

PATH A:\BIN
SET INCLUDE=A:\HEADER
SET LIB=A:\LIB
SET TMP=B:\

tasto F6 e Return

Ora avendo eseguito tutto questo il vostro disco di lavoro sara' il B: e dovrete solo inserire il dischetto 1 nel drive A: in fase di compilazione e il dischetto 2 in fase di link.
Nel caso che possediate invece un sistema a disco fisso l'installazione sara' identica solo che non avverra' su due dischetti ma solo sull' hard.
Createvi anche una directory per i files temporanei chiamata ad esempio \TMP e scrivete il batch precedente nel seguente modo.

PATH C:\BIN
SET INCLUDE=C:\HEADER
SET LIB=C:\LIB
SET TMP=C:\TMP

Prima di compilare lanciatelo.
Se disponete di una versione di DOS a partire dalla versione 3.00 potrete mediante l'utilizzo di VDISK.SYS crearvi un disco virtuale in memoria e settare la variabile TMP su questo sveltendo la procedura di compilazione.


Errori riportati dal compilatore

Precedentemente ho parlato di VI in quanto dispone di molte caratteristiche utili per lo sviluppo di programmi C.
Una di queste, ed e' importante che il vostro editor la possieda, e' la possibilita' di arrivare ad un certo numero di linea del source semplicemente specificandola.
Non per scoraggiarvi ma difficilmente riuscirete a redare un programma che in fase di compilazione non dia errori.
Questi possono essere di qualsiasi tipo, da quelli di disattenzione come parentesi non bilanciate a quelli derivati dal cattivo uso di funzioni, variabili e puntatori.
Il compilatore Microsoft segnala errori nel seguente modo.
main.c(23):Error 45:missing semicolon

dove main.c e' il programma in cui ha riscontrato un irregolarita', (23) e' il numero di linea, 45 il codice d'errore e l'ultima parte il commento all'errore.
Oltre agli errori che costringono il compilatore ad interrompere il suo lavoro il Microsoft C emette anche messaggi di Warning.


Spesso non influiscono sul risultato del programma ma possono anche, nel caso opposto, dare luogo a grossi pasticci.
Se durante la compilazione vi capitera' di veder comparire una lunga fila di errori non demoralizzatevi in quanto c'e' la possibilita' che dipendano tutti dal primo.
In altre parole se per caso esiste uno scompenso nel bilanciamento di una parantesi tutto quello che segue sara' agli occhi del compilatore inesatto.
Correggete il primo errore e controllate se il resto e' a posto.


Sequenze di Escape

Prima di proseguire con la trattazione del linguaggio vediamo il significato di alcune sequenze di escape tipicamente usate in stringhe e costanti per rappresentare spazi bianchi, caratteri che possiedono particolari significati e per eseguire dei ritorni a capo.
Queste sequenze sono rappresentate da un backslash '\' e da
sequenze di caratteri.

Sequenza Escape Significato
------------------------------------------
\n New line
\t Tab orizzontale
\v Tab verticale
\b Backspace
\r Carriage Return
\f Form feed
\\ Backslash
\nnn Carattere ASCII
in notazione ottale
\xnn Carattere ASCII
in notazione esad.
\" Virgolette
\' Apostrofo

Essendo backslash, apostrofo e virgolette utilizzati dal linguaggio per svariate funzioni, la possibilita' di utilizzare, ad esempio in stampe, questi caratteri e' data proprio dall'uso di sequenze di escape.
Ad esempio per stampare la stringa

questa e' una "prova"

si dovrebbe utilizzare un comando di stampa nel seguente modo

printf("questa e' una \"prova\"");


facendo si che le virgolette in cui e' racchiusa la scritta prova
non vengano considerati come quelle che segnalano la fine della
stringa.
Altre sequenze di ESC per la gestione del video e della tastiera
le vedremo piu' avanti quando avremo parlato del concetto di
macro.
Queste ultime possono essere utilizzate con il supporto dell'ANSI
e sono una valida alternativa alla gestione dell'output su
schermo mediante l'utilizzo di interrupt del BIOS o mediante la
scrittura diretta in memoria.


Commenti

Una delle caratteristiche migliori di un programma strutturato e' in genere la comprensibilita' caratteristica che puo' essere notevolmente migliorata mediante l'inserimento nel programma di linee di commento.
Nel linguaggio C un commento viene considerato una sequenza di caratteri racchiusa tra i simboli /* e */.
Sull'argomento abbiamo gia' accennato qualche cosa nei capitoli riguardanti la programmazione strutturata.
Un esempio di commento e' il seguente

printf("1 .. Inizializzazione disco"); /* Prima opzione menu */

Sono anche commenti validi i seguenti

/*
* MAIN.C - Funzione principale
*/

oppure

/******************************
MAIN.C - Funzione principale
******************************/

Non e' invece valido un commento del genere

/* MAIN.C /* programma */ principale */

Tutti i commenti vengono ignorati dal compilatore.




Operatori

Possiamo considerare gli operatori come caratteri che specificano le azioni da compiere sui dati di un programma.
I concetti sono uguali a quelli matematici e difatti si definiscono operandi quelli su cui agiscono gli operatori. Questi ultimi possiedono una priorita' che stabilisce la precedenza sul modo in cui vengono valutate le espressioni.
Le parentesi garantiscono la valutazione nell'ordine desiderato.
Ad esempio:

2 * 8 + 2 e' diverso da 2 * (8 + 2)

Gli operatori che abbiamo a disposizione in linguaggio C sono i
seguenti.

Operatore Nome
-----------------------------------------------------------------
! NOT o negazione
+ Addizione
- Sottrazione
* Moltiplicazione
/ Divisione
% Modulo
~ Complemento ad uno
<< Shift a sinistra
>> Shift a destra
< Minore di
> Maggiore di
<= Minore uguale di
>= Maggiore uguale di
== Uguaglianza
!= Diverso
& AND su bit, indirizzo di
| OR su bit
&& AND logico
|| OR logico
++ Incremento
-- Decremento
= Assegnazione

Oltre a questi vengono considerati tra gli operatori anche i seguenti del cui significato abbiamo gia' parlato nei capitoli riguardanti la programmazione strutturata.

+= -= *= /= %= <<= >>= &= |=

Riporto solo un esempio d'uso di quest'ultimi allo scopo di rinfrescare la memoria.

A += B equivale a A = A + B

RaYoZ
Admin
Admin

Messaggi : 1040
Punti : 2245
Data d'iscrizione : 03.04.10
Età : 22
Località : immerso nei pensieri

Tornare in alto Andare in basso

Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto

- Argomenti simili

 
Permesso di questo forum:
Non puoi rispondere agli argomenti in questo forum