Newsgroup: it.comp.lang.c
Titolo: funzioni in C... e direttive di inclusione file .c

Ciao. Ho questo problema.
Premetto che come ambiente di sviluppo utilizzo Dev-C++  4.9.9.2 sotto
Windows XP, ho scritto il seguente esempio per chiamare una funzione:
Ho determinato 3 file sorgente in una stessa cartella.
Il PRIMO file che ho chiamato main.c è il seguente:
     #include <stdio.h>
     #include "mass.h"
     int main()
     {
         int massimo;
         int a, b;
         printf("Inserire un valore intero per a:\n");
         scanf("%d", &a);
         printf("Inserire un valore intero per b:\n");
         scanf("%d", &b);
         massimo = mass(a, b);
         printf("Il massimo valore tra \"a\" e \"b\" e\': \%d\n",
massimo);
         system("pause");
     }
Il SECONDO file che ho chiamato mass.c è il seguente:
     #include "mass.h"
     int mass(int a, int b)
     {
         if (a > b)
            return a;
         return b;
     }
Infine, il TERZO file che ho chiamato mass.h è il seguente:
     int mass(int, int);
Come ho già detto, ho salvato tutti e tre i file di cui sopra in una
stessa cartella, poi ho aperto il file main.c con Dev-C++  4.9.9.2 e
ho Compilato.
Purtroppo ho ottenuto il seguente errore: Linker error, undefined
reference to `mass'.
Ho notato che questo errore scompare se nel file main.c aggiungo la
direttiva #include "mass.c".
D'altra parte ho trovato su internet che è sconsigliato aggiungere
questo tipo di direttive. Dunque, come posso risolvere il problema?
Grazie

 Ho determinato 3 file sorgente in una stessa cartella.
In che senso? non stai usando un progetto Dev?
Il linker ha bisogno di sapere quali sono i file oggetto che concorrono
alla costruzione dell'eseguibile, quindi qualcuno lo deve istruire su
quali sono.
Se non lo fai tu (specificando esplicitamente quali sono i percorsi di
libreria), lo fa l'ambiente di sviluppo in automatico, considerando i file
appartenenti allo stesso progetto come quelli da linkare. In sostanza: se
crei un nuovo progetto Dev, non hai bisogno di specificare nulla e sì,
includere un .c è sbagliato.
p.s.: perché non usi Code::Blocks? anch'esso è basato su mingw ma lavora
molto meglio di Dev.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 non stai usando un progetto Dev?
No, ho sentito parlare di progetti Dev, ma non li ho mai utilizzati,
non so come si utilizzino.


 non so come si utilizzino.
Menu File...
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
Ho incluso nel nuovo progetto tutti e tre i file, main.c, mass.c e
pure mass.h.
E' strettamente necessario includere anche il file mass.h ?
Già che ci sono ho altre due domande:
Per poter leggere l'output dell'eseguibile è abbastanza fastidioso
dover inserire ogni volta nel main l'istruzione
system("pause");
C' è un modo per ovviare a questo?
Ultima domanda: spesso mi tornerebbe utile poter spezzare una lunga
sequenza di codice come
printf("Il massimo valore determinato dalla funzione composta di f e
di h mediato da cos tra \"a\" e \"b\" e\': \%d\n", massimo);
in due, affinché all'atto della stampa essa risulti stampata
interamente. Ho provato a fare così:
printf("Il massimo valore determinato dalla funzione ( )
composta di f e di h mediato da cos tra \"a\" e \"b\" e\': \%d\n",
massimo);
con il cosiddetto "simbolo di continuazione alla riga successiva", ma
ciò non è il modo corretto di procedere. Come posso fare dunque?
Grazie

 ciò non è il modo corretto di procedere. Come posso fare dunque?
Con la barra  si crea la continuazione della stringa, oppure fai printf()
successive.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
