View Full Version : [c++,c]Comunicare un(altro) file .c
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?
allora se devi accedere alle funzioni di un altro sorgente gurardati include
se vuoi richiamare un altro programma dal tuo guardati system
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.
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"...
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?
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.
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
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.
Grazie mille per l'aiuto e per la pazienza
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.
void mostra()...non void mostra(void)
Togli anche il void a main.
#include "Esempio.h"
lo devi mettere in b.c
Ops... nel codice ho messo Esempio.h, avevo sbagliato a riportarlo nel forum (ho modificato).
Continua a segnalarmi l'errore
b.c l'hai aggiunto nel progetto ? Non sembra che te lo stia compilando.
Si l'ho aggiunto, ho creato un file b.c e l'ho messo nella stessa cartella di a.c Esempio.h
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.
:eek: Grazie mille, problema risolto Grazie. ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.