我试着用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 }
Run Code Online (Sandbox Code Playgroud)
但是,它失败并且编译器生成以下错误日志:
如果我在main函数之前移动my_print和my_print2函数,一切顺利.所以有人能解释为什么会出现这个问题吗 谢谢!
MBy*_*ByD 40
如果你没有声明一个函数并且它只在被调用后出现,它会自动被假定为int,所以在你的情况下,你没有声明
void my_print (char *);
void my_print2 (char *);
Run Code Online (Sandbox Code Playgroud)
之前你怎么称呼它在主,所以编译器假设有功能,这它们的原型int my_print2 (char *);和int my_print2 (char *);你不能有相同的原型两个功能不同的返回类型,所以你得到的错误conflicting types.
正如Brian建议的那样,在main之前声明这两个方法.
您必须声明你的函数之前, main()
(或之前声明函数原型main())
正因为如此,编译器看到my_print (my_string);的main()是一个函数声明.
将您的函数移到main()文件中,或者放入:
void my_print (char *);
void my_print2 (char *);
Run Code Online (Sandbox Code Playgroud)
main()在文件上方.
| 归档时间: |
|
| 查看次数: |
108298 次 |
| 最近记录: |