c++ vs 函数调用问题

我正在编写以个比较长的程序,需要编写10个上下的函数,发现函数的代码放在main函数前面,放到第7个时会出错,提示说要添加分号........我将函数放到main后面,再... 我正在编写以个比较长的程序,需要编写10个上下的函数,发现函数的代码放在main函数前面,放到第7个时会出错,提示说要添加分号........我将函数放到main后面,再在main函数里面声明,编写的程序完全能运行,也能实现想要的功能.......但,随着main函数后面的函数增多,问题又来了.....发现在main函数里面声明不行了,当在函数里面调用另一个函数,要在本函数里面声明所调用的函数....
这是为什么啊

这是代码连接
链接: http://pan.baidu.com/s/1i3GaHBR 密码: fpz1

我的代码是可以运行的,就是不知道为什么要那样,
我一直以为mian函数前可以定义所有函数
展开
 我来答
百度网友c1994c5f8
2014-10-25 · TA获得超过1332个赞
知道小有建树答主
回答量:264
采纳率:89%
帮助的人:196万
展开全部

标准的做法是:把所有函数声明放到最前面,全部声明完毕之后才是函数的具体实现。

举例如下:

#include<xxxxxx>
 
// 这里把所有自定义函数的声明提到最前面,
// 解决由于函数实现顺序导致的调用未定义函数的问题
int fun1(int x, int y);
int fun2(int x);
void fun3(void);
.............
// 结束声明
 
void main(void)
{
........
}
 
int fun2(int x)
{
  int a, b;
  .......
  return fun1(a, b);
}
 
int fun1(int x, int y)
{
......
}
 
void fun3(void)
{
......
}

 

注意上面fun2实现里面调用了fun1, 而fun2实现却在fun1之前,

由于在最前面已经声明了fun1, 所以fun2这样调用fun1不会有问题。

 

把自定义函数的声明放到最前面的好处是,你完全不用考虑函数之间相互调用导致的函数实现顺序问题,因为全部都在前面声明了。

追问
等我明天试下
为什么谭浩强的c++书,他的函数声明都是放在主函数里面啊,是不是他的书误导我了,搞得我以为我的代码写错 了,找了很就才知道。觉得你说得挺有道理的,那个写法是不是真的是标准写法啊

还有,帮我看下能不能消除警告信息
追答
事实上,很早以前我学C的时候,都是要求把函数声明放在所有函数外面。参考一下编译器的头文件也都是这样做,我认为是标准写法。

书上把声明放到主函数里面确实会误导人,很显然在主函数内部声明某个函数,则这个声明只在主函数内部有效。对其他函数而言,如果也调用了这个函数,那么也需要在实现里声明调用的函数。既然这样,把所有函数声明放在所有函数之外的最前面就是最佳做法。

书上的写法没有考虑到各函数间相互调用的问题,默认只有主函数会调用这些函数,我个人不认可这种写法,以前我看过的书也没有这样写的。最近在网上看到很多人的代码用这种写法,我都觉得很奇怪,现在算是明白了,这种书确实非常误导人。

关于警告信息的问题,标准库里面兼容C的大部分字符串函数都没有做边界检查,容易发生溢出的问题,这是历史原因造成的。你现在只是学习,只要知道这回事并加以注意,还是用标准库函数好了。
White_MouseYBZ
2014-10-25 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6335万
展开全部
自定义函数多了,解决办法就是把函数单独写在一个头文件里,在主函数前包含这个头文件就行了;在自定义函数中调用另一个自定义函数,要保证被调用的自定义函数在主调函数前定义,否则就要在主调函数中声明。不然就存在你说的问题。
追问
你说“”在自定义函数中调用另一个自定义函数,要保证被调用的自定义函数在主调函数前定义“”
在主函数声明也没用啊,他提示错,说是没命名字符,我将那个声明函数复制一份给,那个自定义函数,就可以运行了
追答
在主函数中声明不能解决这个问题,若fun1在fun2后面定义,那么fun2要调用fun1的话得在fun2中声明fun1,否则只能将fun1定义在 fun2前面。我说的是在“主调函数中”声明,不是在“主函数”中声明……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-10-25
展开全部
以楼上的方法可以解决几乎所有的函数调用申明的问题。不能解决那就肯定是你代码写错了。贴下代码吧
追问
代码太长发不了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haiyangfenghuo
2014-10-25 · TA获得超过2439个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:775万
展开全部
你建的什么工程啊,这么牛叉。
你的添加分组2所在的那个函数怎么跟上一个函数的}放在一行上了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友902bbf8
2014-10-25 · 超过18用户采纳过TA的回答
知道答主
回答量:92
采纳率:100%
帮助的人:32.5万
展开全部
可以将所有函数在main前声明,在main后实现
更多追问追答
追问
真的不行啊
追答
我把声明放到千前边是可以的啊
链接: http://pan.baidu.com/s/1sj5AZCD 密码: cp6b
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式