PDA

View Full Version : [c++,c]Comunicare un(altro) file .c


ohi
11-01-2010, 17:41
Ciao credo di nn essermi espresso nel migliore dei modi nel titolo, cmq parto con l'esempio: Io sto scrivendo un programma che elebora delle stringhe, ho preso on-line un codice che genera stringhe, dovrei far comunicare il mio programma con quest'altro codice c che produce le stringhe, cioè un istruzione che passa i dati al programma genera_stringa.c (ad esempio) e riceve la stringa da questo programma, sostanzialmente come una funzione solo che anziche chiamare una funzione interna al codice devo chiamare delle funzioni (main) su un altro file.
Help Please.

Teo@Unix
12-01-2010, 08:56
Ciao credo di nn essermi espresso nel migliore dei modi

già...

trà l'altro "genera_stringa.c" è un sorgente non un programma...

vuoi chiamare una funzione dichiarata in un'altro sorgente oppure far comunicare due programmi?

!fazz
12-01-2010, 10:50
allora se devi accedere alle funzioni di un altro sorgente gurardati include

se vuoi richiamare un altro programma dal tuo guardati system

cionci
12-01-2010, 11:07
Ricordait che non si includono mai file .c, ma solo file .h, quindi dovrai estrarre gli header dal file .c ed includerli nell'altro file .c. A quel punto in fase di compilazione linki insieme i due file .c.

ohi
12-01-2010, 23:12
trà l'altro "genera_stringa.c" è un sorgente non un programma..

Hai perfettamente ragione scusate è una sorgente :doh:


Ricordait che non si includono mai file .c, ma solo file .h, quindi dovrai estrarre gli header dal file .c ed includerli nell'altro file .c. A quel punto in fase di compilazione linki insieme i due file .c.

chiedo nuovamente scusa ho paura che mi sia sfuggito qualcosa, rinomino la sorgente genera_stringa.c in genera_stringa.h?

Teo@Unix
13-01-2010, 08:45
no non devi rinominarli...

puoi anche inserire tutto il programma in un file .c
La prassi è però dividere le dichiarazioni e le direttive "#include" in un file .h a parte. (header)
il file .c allora dovrà contenere una istruzione tipo: #include "file.h".

so ho capito bene vuoi utilizzare una funzione di un'altro sorgente...

allora se i sorgenti che hai scaricato sono un file .c ed un .h dovrebbe esserti sufficiente aggiungere nel tuo progetto #include "nome_file.h"...

ohi
14-01-2010, 18:47
Grazie.

allora se i sorgenti che hai scaricato sono un file .c ed un .h dovrebbe esserti sufficiente aggiungere nel tuo progetto #include "nome_file.h"...

Io ho solo il file .c, quindi il file .h lo devo creare io

A quel punto in fase di compilazione linki insieme i due file .c.

Scusate Come faccio a linkare 2 file insieme?

cionci
14-01-2010, 18:59
Quale compilatore o ambiente di sviluppo usi ?

Il file .h lo devi creare inserendo le intestazioni di tutte le funzioni che vuoi usare nell'altro file .c.

ohi
14-01-2010, 20:11
Uso Visual Studio.

Grazie mille credo di aver capito.

Un ultimo dubbio (nel file .h) non devo indicare dove si trovano i file il .c, riconosce da solo

cionci
14-01-2010, 21:00
In Visual Studio devi semplicemente aggiungere l'altro .c al progetto ed il relativo .h al progetto.
Non devi indicare niente nel .h, ci penserà il linker ad unire al tuo file .c l'altro file .c per risolvere i collegamenti mancanti.

ohi
15-01-2010, 12:11
Grazie mille per l'aiuto e per la pazienza

ohi
15-01-2010, 17:16
Scusate mille sono di nuovo io (lo zuccone :muro:)
Ho fatto delle prove ma ho riscontrato dei problemi, ho provato un esempio piuttosto sciocco

Esempio.h


extern int miavariabile;

void mostra(void);


a.c


#include<stdio.h>
#include "Esempio.h"
int miavariabile;

int main(void)
{
printf("\t Inserisci valore per la variabile: \n \t");
scanf("%d", &miavariabile);
printf("\t Hai inserito:");
mostra();

return 0;
}


b.c


#include<stdio.h>
#include "Esempio.h"
void mostra(void)
{
printf("\t %d \n" , miavariabile);
}


Quando compilo a.c mi mostra l'errore:

Compiling...
a.c
Linking...
a.obj : error LNK2001: unresolved external symbol "void __cdecl mostra(void)" (?mostra@@YAXXZ)
Debug/a.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

cionci
15-01-2010, 17:22
void mostra()...non void mostra(void)
Togli anche il void a main.

cionci
15-01-2010, 17:30
#include "Esempio.h"

lo devi mettere in b.c

ohi
15-01-2010, 18:00
Ops... nel codice ho messo Esempio.h, avevo sbagliato a riportarlo nel forum (ho modificato).

Continua a segnalarmi l'errore

cionci
15-01-2010, 18:05
b.c l'hai aggiunto nel progetto ? Non sembra che te lo stia compilando.

ohi
15-01-2010, 18:30
Si l'ho aggiunto, ho creato un file b.c e l'ho messo nella stessa cartella di a.c Esempio.h

cionci
15-01-2010, 18:33
Si l'ho aggiunto, ho creato un file b.c e l'ho messo nella stessa cartella di a.c Esempio.h
Non lo devi mettere solo nella stesa catella, lo devi aggiungere ai file sorgenti all'interno del progetto.

ohi
15-01-2010, 20:21
:eek: Grazie mille, problema risolto Grazie. ;)