View Full Version : [C] inclusione file
nlazza87
22-06-2009, 18:18
Salve, sto creando un piccolo programma in C ma ho problemi con l'inclusione dei file header.
Ho creato il file "fixed.h" in cui definisco una struct e inserisco l'interfaccia dei metodi, un file "fixed.c" in cui implemento i metodi del file header ed un programma di test in cui è presente il main.
Sia sul file .c che nel file di test ho messo: #include "fixed.h" ma quando compilo il file di test mi viene detto che i metodi che uso nel main non sono definti.
Per caso dimentico qualcosa?
a parole sembra tutto giusto, posta in piccolo esempio dei 3 file
nlazza87
22-06-2009, 21:35
Fixed.h
#define F 8
#include <stdio.h>
typedef unsigned int FixedPoint;
FixedPoint fixpoSum(FixedPoint a, FixedPoint b);
....altri metodi....
Fixed.c
#include <stdio.h>
#include "Fixed.h"
#include <math.h>
FixedPoint fixpoSum(FixedPoint a, FixedPoint b){
return a+b;
}
...altri metodi implementati....
Test.c
#include <stdio.h>
#include "Fixed.h"
int main(){
FILE * ptr;
FixedPoint a;
a=fixpoSum(5,5);
come compili i sorgenti? ah è buona cosa usare gli include guard:
http://it.wikipedia.org/wiki/Include_guard
nlazza87
23-06-2009, 15:06
Avevo già provato ad inserire #ifndef FIXED_H_ ed #endif ma non cambia nulla.
Per quanto riguarda la compilazione:
gcc -c fixed.h
gcc -c fixed.c
gcc -c test.c
gcc -o test test.c -lm
-lm perchè uso la libreria math.h
Avevo già provato ad inserire #ifndef FIXED_H_ ed #endif ma non cambia nulla.
Per quanto riguarda la compilazione:
gcc -c fixed.h
gcc -c fixed.c
gcc -c test.c
gcc -o test test.c -lm
-lm perchè uso la libreria math.h
il problema è nella compilazione, compilare un .h non ha senso, e in fase finale compili solamente test.c per creare l'eseguibile senza linkare fixed.
devi fare così
gcc -c -o fixed.o fixed.c
gcc -c -o test.o test.c
gcc -o test test.o fixed.o -lm
in questo modo crei gli object file per ogni file compilato e poi li linki insieme nell'eseguibile "test".
in questi casi utilizzare un makefile semplifica notevolmente le cose, sopratutto se nel progetto aggiungerai altri file da compilare.
oltre all'utile consiglio sugli include guard, non è necessario che fixed.c includa fixed.h. per il resto credo che ci sia qualcosa che non va nel modo in cui compili (stai compilando a mano o con qualche ide?):)
Sì, ma non ha detto che si limita a solamente quel metodo. E' generalmente invece utile includere il .h per non dover preoccuparsi dell'ordine in cui si implementano le funzioni o se ci sono chiamate incrociate.
nlazza87
23-06-2009, 19:23
il problema è nella compilazione, compilare un .h non ha senso, e in fase finale compili solamente test.c per creare l'eseguibile senza linkare fixed.
devi fare così
gcc -c -o fixed.o fixed.c
gcc -c -o test.o test.c
gcc -o test test.o fixed.o -lm
in questo modo crei gli object file per ogni file compilato e poi li linki insieme nell'eseguibile "test".
in questi casi utilizzare un makefile semplifica notevolmente le cose, sopratutto se nel progetto aggiungerai altri file da compilare.
Ti ringrazio, così funziona tutto :) ! Un domanda stupida: se io modifico il file di test oppure anche il file fixed.c è sufficente che esegua gcc -c per controllare eventuali errori?
E' sufficiente per controllare eventuali errori di compilazione.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.