PDA

Visualizza la versione completa : [C] Struttura di un file C


notexpert
29-07-2011, 14:07
Salve, premetto che sono un principiante in programmazione e ho un progetto.
In pratica voglio crearmi un utility che mi permetta di risolvere diversi calcoli matematici.
La mia idea è quella di una finestra di terminale nel quale scrivere alcuni comandi (per esempio 'parabola' 'binomio di newton' 'equazione di terzo grado') e di accedere a parti di codice che mi risolvono appunto una parabola, un binomio di newton...
Per fare ciò avevo pensato ad una struttura del genere:

int main (int argc, const char * argv[])
{

COMBINAZIONISEMPLICI:
printf("Calcolo delle Combinazioni Semplici\nInserisci n e k\n");
int n;
int k;
scanf("%d", &n);
scanf("%d", &k);
printf("Il numero di CS è %ld \n", CombiSemplici(n,k));
ALTRO: //altre parti di codice che rimandano a funzioni
printf("...");

return 0;
}

con tutte le funzioni fuori da main e richiami alle funzioni quando occorrono (come in CombiSemplici).

Ora non ho la più pallida idea se questo "modus operandi" è quello corretto o se ci sono soluzioni molto più "eleganti".

Ringrazio chiunque mi possa dare una mano.

Lorenzo.

Freax
29-07-2011, 14:23
peggio del C, per un principiante, c'è solo l'Assembly, non è esattamente il linguaggio da far studiare ad una persona come te, cioé che vuole tanto con poco sforzo e per giunta è all'inizio.

Detto questo, ti conviene fare una opportuna divisione in vari file sorgente delle varie funzioni, quando dico opportuna intendo dire che sta a te decidere quante e quali funzioni accorpare in un file, ovviamente porre nello stesso file la funzione del calcolo del volume di un corpo solido e la funzione che calcola una successione di Fibonacci è lecito per il compilatore ma poco significativo per chiunque usi quel codice.

notexpert
29-07-2011, 14:28
Capisco ma... di norma come viene suddiviso un codice in c? Dico, l'uso del goto è "corretto"? :)

Freax
29-07-2011, 15:08
Originariamente inviato da notexpert
Capisco ma... di norma come viene suddiviso un codice in c? Dico, l'uso del goto è "corretto"? :)

formalmente corretto ma è caldamente consigliato il suo abbandono, il goto contribuisce a rendere molto meno leggibile il codice, complica il debug e la comprensione di un programma, è solitamente un esempio di cattiva programmazione, è una opzione presente nel C ma ci sono modi molto più eleganti, concisi e precisi che far fare salti al codice; anche il solo return è sicuramente preferibile, anche se sempre da evitare finché si può.

la struttura di controllo migliore, non migliore in assoluto, la più elegante diciamo così, è l'IF, anche detto IF than ELSE per i più precisi, che per condizioni multiple concatenate diventa un cosidetto IF multiramo ( anche detto else-if o nested ).

http://programmazione.html.it/guide/lezione/1096/controlli-condizionali-ifelse/

questa è solitamente una struttura che può sostituire con maggiore eleganza una bruttura come goto ( più che bruttura è una istruzione che oggi non ha molto senso ), solitamente l'IF-ELSE è preferito anche ad uno switch case vista la maggiore flessibilità.

devi comunque specificare qualcosa di più sul tuo progetto, altrimenti il thread diventa una lezione sul C :ciauz:

goatboy
29-07-2011, 15:49
Come si fa a richiamare funzioni che sono su altri file sorgenti? :confused:

Freax
29-07-2011, 15:54
Originariamente inviato da goatboy
Come si fa a richiamare funzioni che sono su altri file sorgenti? :confused:

secondo te la direttiva #include a cosa serve?

goatboy
29-07-2011, 15:56
Originariamente inviato da Freax
secondo te la direttiva #include a cosa serve?
Era solo un dubbio, non avendolo mai fatto :ciauz:

Freax
29-07-2011, 16:01
Originariamente inviato da goatboy
Era solo un dubbio, non avendolo mai fatto :ciauz:

c'è anche da studiare la fase di creazione dell'oggetto e linking per capire cosa avviene, solitamente i file vengono "fusi" nell'operazione di linking.

notexpert
29-07-2011, 17:56
Quindi, ricapitolando, io potrei scrivere le mie funzioni in file sorgenti separati, per esempio
Trigonometria.h, Algebra.h, TeoriaDeiNumeri.h etc.
poi mettere
#include Trigonometria.h
#include ... etc
e in un file solo mettere solo main... con tutti i richiami alle funzioni
e il compilatore si preoccupa di andare a cercare tutto quello che gli serve.

Ma questo è fantastico!

Celebron
29-07-2011, 18:58
Ricordati che nei .h devi mettere solo prototipi ed eventuali define e typedef
nei .c devi mettere le funzioni vere e proprie e le varie variabili, includendo in essi anche i relativi .h in modo che il compilatore possa controllarli

Loading