errore di tipo in conflitto durante la compilazione del programma c utilizzando gcc

Ho provato a compilare il seguente programma con gcc.

0 #include  1 2 main () 3 4 { 5 char my_string[] = "hello there"; 6 7 my_print (my_string); 8 my_print2 (my_string); 9} 10 11 void my_print (char *string) 12 { 13 printf ("The string is %s\n", string); 14 } 15 16 void my_print2 (char *string) 17 { 18 char *string2; 19 int size, i; 20 21 size = strlen (string); 22 string2 = (char *) malloc (size + 1); 23 24 for (i = 0; i < size; i++) 25 string2[size - i] = string[i]; 26 27 string2[size+1] = '\0'; 28 printf ("The string printed backward is %s\n", string2); 29 } 

Tuttavia, non riesce e il compilatore produce il seguente log degli errori:

  1. greeting.c: 11: errore: tipi in conflitto per “my_print”
  2. greeting.c: 7: errore: la dichiarazione implicita precedente di ‘my_print’ era qui
  3. greeting.c: 16: errore: tipi in conflitto per “my_print2”
  4. greeting.c: 8: erroro: la dichiarazione implicita precedente di ‘my_print2’ era lì

E se sposto le funzioni my_print e my_print2 prima della funzione principale, tutto va bene. Quindi qualcuno può spiegare perché il problema si verifica? Grazie!

Se non dichiari una funzione e appare solo dopo essere stata chiamata, si presume automaticamente che sia int , quindi nel tuo caso non hai dichiarato

 void my_print (char *); void my_print2 (char *); 

prima di chiamarlo in main, quindi il compilatore assume che ci sono funzioni che i loro prototipi sono int my_print2 (char *); e int my_print2 (char *); e non è ansible avere due funzioni con lo stesso prototipo ad eccezione del tipo restituito, in modo da ottenere l’errore di conflicting types .

Come suggerito da Brian, dichiarare questi due metodi prima di main.

Devi dichiarare le tue funzioni prima di main()

(o dichiarare la funzione prototipi prima di main() )

Così com’è, il compilatore vede my_print (my_string); in main() come dichiarazione di funzione.

Sposta le tue funzioni sopra main() nel file, o metti:

 void my_print (char *); void my_print2 (char *); 

Sopra main() nel file.

Per rispondere a un caso più generico, questo errore si nota quando si seleziona un nome di funzione che è già utilizzato in alcune librerie incorporate. Ad esempio, selezionare.

Un semplice metodo per conoscerlo è durante la compilazione del file, il compilatore indicherà la dichiarazione precedente.