C语言中主函数和被调函数位置能变吗?

调试下面程序出现错误:#include<stdio.h>main(){intsum,a,b;printf("inputaandb:");scanf("%d%d",&a,&... 调试下面程序出现错误:
#include<stdio.h>
main()
{
int sum,a,b;
printf("inputa and b:");
scanf("%d%d",&a,&b);
sum=plus(a,b);
printf("%d",sum);
}
plus(int x,int y);
{
return(x+y);
}

Compiling...
1.cpp
E:\C语言\MyProjects\1\1.cpp(8) : error C2065: 'plus' : undeclared identifier
E:\C语言\MyProjects\1\1.cpp(10) : warning C4508: 'main' : function should return a value; 'void' return type assumed
E:\C语言\MyProjects\1\1.cpp(12) : error C2373: 'plus' : redefinition; different type modifiers
执行 cl.exe 时出错.

1.obj - 1 error(s), 0 warning(s)
但是,下面的程序是可以运行的:
#include<stdio.h>
plus(int x,int y)
{
return(x+y);
}
main()
{
int sum,a,b;
printf("inputa and b:");
scanf("%d%d",&a,&b);
sum=plus(a,b);
printf("%d",sum);
}
为什么?
展开
 我来答
_叶子妞妞_
推荐于2016-05-21 · TA获得超过3672个赞
知道小有建树答主
回答量:327
采纳率:83%
帮助的人:90.1万
展开全部

主函数和被调函数位置可以改变。不过如果被调函数和主调函数不在同一个文件中,或者被调函数在主调函数的同一文件内的下方,那么在主调函数调用被调函数前,需要进行被调函数的声明。

下面以主调函数为main,被调函数为func做例子,编写示例代码,辅助理解。

1 主调函数与被调函数在同一文件内,且被调函数在前。

这种情况直接调用即可。

#include <stdio.h>
void func(void)
{
    printf("this is func\n");
}

int main()
{
    func();
}


2  主调函数与被调函数在同一文件内,且被调函数在后。

需要在调用前声明。

#include <stdio.h>
void func(void);//在被调前声明,也可以在函数内声明,如下方注释。
int main()
{
    //如果没有在函数外声明,那么可以在函数内声明。如下:
    void func(void);//此处声明和函数外声明保留一个即可。
    func();
}

void func(void)//被调函数在主调函数之后。
{
    printf("this is func\n");
}

3  主调函数与被调函数不在同一文件内。

可以采用同第2种同样的声明方式,不过建议增加extern关键字,表明该函数为外部文件定义,但该关键字并非强制,没有同样不会出问题。

文件a.c

#include <stdio.h>
void func(void)//存在于a.c中的func.
{
    printf("this is func\n");
}

文件main.c

#include <stdio.h>
extern void func(void);//声明为外部函数,无extern也可以。 同样可以声明在函数内。
int main()
{
    //如果没有在函数外声明,那么可以在函数内声明。如下:
    extern void func(void);//此处声明和函数外声明保留一个即可。
    func();
}

不过更常用的方式是把函数声明写在头文件中,并在主调函数所在的文件引用。

文件a.h

#ifndef _A_H_//这两行是为避免重复引用和循环引用。
#define _A_H_

void func(void);//将函数声明置于头文件。
#endif

这种情况下main.c需要写成:

#include <stdio.h>
#include <a.h>//引用头文件。

int main()
{
    func();//调用函数。
}
l568288g
推荐于2017-12-16 · TA获得超过242个赞
知道答主
回答量:131
采纳率:100%
帮助的人:31万
展开全部
#include<stdio.h>
int plus(int x,int y);
int main()
{
    int sum, a, b;
    printf("input a and b:");
    scanf("%d%d", &a, &b);
    sum = plus(a, b);
    printf("%d", sum);
    return 0;
}
int plus(int x,int y)
{
    return(x+y);
}

最好先声明一下函数  int plus(int x,int y); 返回类型是int

然后顺序无所谓了

你出错的那个 plus(int  x,int y); 多了个分号 不是函数定义

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liangzhaolin6
2014-01-10 · 超过27用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:54.6万
展开全部
楼主,其实你的第一个程序没多大的错,问题出在被调函数
plus(int x,int y);{return(x+y);}
后面多了个 分号,只要去掉那个分号程序就能运行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
操羽40
2014-01-10 · TA获得超过430个赞
知道小有建树答主
回答量:374
采纳率:100%
帮助的人:238万
展开全部
这原因很简单,C语言的运行过程是这样的,先运行main函数也就是主函数,运行到plus这个函数的时候并没有被声明过所以会报错,但是放在了main函数之前就把plus这个函数给出来就不存在这个问题了,最简单的解决方式是,在最开始的地方把函数全部声明一下,这样main函数以及其它函数在调用的时候就不会出现没有被声明的错误了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shangch2568
2014-01-10 · TA获得超过586个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:234万
展开全部
c语言的自定义函数一般写在主函数前面,如果写在后面也可以,但是在前面要添加一个声明。比如该例子,在主函数前面添加int plus(int x,int y);即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式