I tried to compile following program with gcc.
0 #include <stdio.h>
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 }
However, it fails and the compiler produces following error log:
- greeting.c: 11: error:conflicting types for ‘my_print’
- greeting.c: 7: error: previous implicit declaration of ‘my_print’ was here
- greeting.c: 16: error:conflicting types for ‘my_print2’
- greeting.c:8: erroro:previous implicit declaration of ‘my_print2’ was there
And if I move the my_print and my_print2 functions before the main function, everything goes well.
So can anyone explain why the problem happens?
Thanks!
If you don’t declare a function and it only appears after being called, it is automatically assumed to be
int, so in your case, you didn’t declarebefore you call it in main, so the compiler assume there are functions which their prototypes are
int my_print2 (char *);andint my_print2 (char *);and you can’t have two functions with the same prototype except of the return type, so you get the error ofconflicting types.As Brian suggested, declare those two methods before main.