[Risolto] Dubbio programmazione modulare in C
Inviato: venerdì 10 marzo 2017, 15:34
Salve a tutti.
Per esercitarmi, ho scritto un programma che usa delle funzioni di ordinamento degli array (bubblesort, insertion sort...): le funzioni le ho scritte nel file func.c e il loro prototipo in array.h; quando vado a compilare, gcc mi da questo errore:
Il compilatore non mi da errore se scambio così di posizione le due funzioni:
Vorrei sapere perché gcc mi da errore se scrivo prima la funzione bubble e poi la funzione ordinato?
Ciò non accade se dichiaro le due funzioni nello stesso file della main.
Per esercitarmi, ho scritto un programma che usa delle funzioni di ordinamento degli array (bubblesort, insertion sort...): le funzioni le ho scritte nel file func.c e il loro prototipo in array.h; quando vado a compilare, gcc mi da questo errore:
Codice: Seleziona tutto
alessandro@lenovo:~/Scrivania/progetto$ gcc main.c func.c -o progetto.out
main.c: In function ‘main’:
main.c:10:8: warning: implicit declaration of function ‘time’ [-Wimplicit-function-declaration]
srand(time(NULL));
^
func.c: In function ‘bubble’:
func.c:48:10: warning: implicit declaration of function ‘ordinato’ [-Wimplicit-function-declaration]
while (!ordinato(array,lim))
^
func.c: At top level:
func.c:64:16: error: conflicting types for ‘ordinato’
unsigned short ordinato(int *array,int lim)
^
func.c:48:10: note: previous implicit declaration of ‘ordinato’ was here
while (!ordinato(array,lim))
^
Codice: Seleziona tutto
unsigned short ordinato(int *array,int lim)
{
int i;
for(i=0;i<lim-1;i++)
{
if (array[i]>array[i+1])
return 0;
}
return 1;
}
void bubble(int *array,int lim)
{
int i, T;
while (!ordinato(array,lim))
{
for(i=0;i<lim-1;i++)
{
if (array[i]>array[i+1])
{
T = array[i];
array[i] = array[i+1];
array[i+1] = T;
}
}
}
}
Ciò non accade se dichiaro le due funzioni nello stesso file della main.