2220201979 发表于 2022-11-15 21:42:49

函数的声明问题

在VC6.0当中,同样是在未声明就调用函数的情况下,为什么把add()声明为int就没有报错,而把add()声明为void就报错
#include <stdio.h>
void main()
{
        inta=2,b=3;
        printf ("a=%d, b=%d\n",a, b);
        add(a,b);
        printf("a=%d,b=%d\n", a,b);
}
int        add(int x,int y)//add声明为int型
{        x=x+8; y=y+12;
        printf("x=%d,y=%d\n",x,y);
}

#include <stdio.h>
void main()
{
        inta=2,b=3;
        printf ("a=%d, b=%d\n",a, b);
        add(a,b);
        printf("a=%d,b=%d\n", a,b);
}
voidadd(int x,int y)//add声明为void型
{        x=x+8; y=y+12;
        printf("x=%d,y=%d\n",x,y);
}

jackz007 发表于 2022-11-15 21:59:41

本帖最后由 jackz007 于 2022-11-15 22:01 编辑

      报错的原因和 int 、void 毫无关系,和 add() 函数在文件中的位置有关,如果 main() 在前,add() 函数定义在后,那就是调用在前,函数定义在后,会出现函数 add() 未定义错误,所以,这样写,在调用 add() 之前,必须先对这个函数进行声明,否则,需要把 add() 函数的定义位置提前到调用位置之前,也就是,把 main() 放到文件最后。
      编译一下这个曾经报错的代码,看看是不是还在报错?
#include <stdio.h>

void add(int x , int y)
{      x = x + 8 ; y = y + 12   ;
      printf("x=%d,y=%d\n",x,y)   ;
}

int main()
{
      inta=2,b=3;
      printf ("a=%d, b=%d\n",a, b) ;
      add(a , b)                   ;
      printf("a=%d,b=%d\n", a,b)   ;
}

zwj.123 发表于 2022-11-15 22:10:24

jackz007 发表于 2022-11-15 21:59
报错的原因和 int 、void 毫无关系,和 add() 函数在文件中的位置有关,如果 main() 在前,add()...

抱歉啊答主,虽然我也不知道为什么,但是我感觉还是没有回答到疑惑呢

2220201979 发表于 2022-11-15 22:15:37

jackz007 发表于 2022-11-15 21:59
报错的原因和 int 、void 毫无关系,和 add() 函数在文件中的位置有关,如果 main() 在前,add()...

file:///D:/%E6%A1%8C%E9%9D%A2%E6%96%87%E4%BB%B6%E5%A4%B9/%E7%85%A7%E7%89%87/%E5%A3%B0%E6%98%8E.png有图有真相,没声明也调用了

2220201979 发表于 2022-11-16 22:03:50

zwj.123 发表于 2022-11-15 22:10
抱歉啊答主,虽然我也不知道为什么,但是我感觉还是没有回答到疑惑呢

+1

两手空空儿 发表于 2022-11-16 22:21:47

我也不知道为什么,但是楼主要纠结这个么?
我的DEV C++ 不管是 void 还是 int 都会报错
VC6好像过于老旧了,编译器有点过时
页: [1]
查看完整版本: 函数的声明问题