鱼C论坛

 找回密码
 立即注册
查看: 1889|回复: 6

答题看女女 c

[复制链接]
发表于 2015-7-31 11:11:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

void main()
{
        int c[10]={1,3,2,4,5,6,7,5,4,5};
    int i;
        for(i=0; i<10; i++){
                 test(c[i]);                =============我要疯了   
        }
        printf("\n");
}

  void test(int v)
  {
          if(v>0){
             printf("%d",v);
          }
          else{
            printf("%d",0);
          }
     
  }  

C:\Program Files\Microsoft Visual Studio\MyProjects\over\over.c(8) : warning C4013: 'test' undefined; assuming extern returning int
C:\Program Files\Microsoft Visual Studio\MyProjects\over\over.c(14) : error C2371: 'test' : redefinition; different basic types
执行 cl.exe 时出错.
593e2991jw1ej1bjshtzrj20sg0lcju6.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-31 11:50:51 | 显示全部楼层
本帖最后由 零度非安全 于 2015-7-31 12:54 编辑
主函数中的text(c[])里的参数是数组类型,而你另外定义的text函数里的参数而是int v,应该是int v[]


还有的就是必须要有返回值

定义的函数也没有声明

以下是我根据你的意思我改编的,仅供参考!

#include <stdio.h>
int test(int v[]);
void main()
{
        int c[10] = { 1,3,2,4,5,6,7,5,4,5 };
        test(c);
        printf("\n");
}
int test(int v[])
{
        int i;
        for (i = 0; i < 10; i++){
                if (v[i]>0) printf("%d", v[i]);
                else printf("%d", 0);
        }
        return v[i];
}



我的是用VS2015在win10环境下测试的,见下图
QQ截图20150731124954.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-31 12:37:29 | 显示全部楼层
函数前置申明
在main函数上面加上 void test(int v);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-4 23:07:14 | 显示全部楼层
不疯才怪。。。开始我也没看出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-5 18:52:44 | 显示全部楼层
在主函数之前做函数的声明 void text(int v)   或者把定义的text函数放到主函数的上面!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-5 20:14:35 | 显示全部楼层
路过打下酱油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-8-6 00:36:23 | 显示全部楼层
好吧,我觉得知道怎么改没什么了不起的。关键在于如何分析编译器的警告和报错。
C:\Program Files\Microsoft Visual Studio\MyProjects\over\over.c(8) : warning C4013: 'test' undefined; assuming extern returning int

其中,over.c(8) : warning C4013: 'test' undefined大概是说文件over.c的第8行,test没有定义。也就是你程序中的 函数调用test(c[i]);
分析下,如果从前往后读,读到这里,确实还没读到函数test的定义(你定义在调用的后面了)。这其实没关系的,只是警告而已。
接着  assuming extern returning int大概是说,编译器认为(assuming)这个函数定义在其它.c文件(extern)中了,并且由于从调用test(c[i])中无法知道函数的返回类型,编译器假定这个函数返回int类型,又,c[i]是int类型,所以编译器至此假定函数test的类型是int test(int).

C:\Program Files\Microsoft Visual Studio\MyProjects\over\over.c(14) : error C2371: 'test' : redefinition; different basic types
大概是说在over.c文件的14行,函数test重定义了,基本类型不一样。也就是说你定义的test函数类型和编译器之前的推断类型不一样,所以编译器判断你在这里向重新定义一个名字叫test的函数,这在C语言中是不允许的。

明白以上道理后,其实你只要把你的定义void test(int v){...}改为int test(int v){...}就不会报错(当然正确的做法应该看前面版主的做法)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 05:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表