问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++ vs 函数调用问题

发布网友 发布时间:2022-10-26 21:56

我来回答

5个回答

热心网友 时间:2023-10-11 11:15

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

举例如下:

#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的大部分字符串函数都没有做边界检查,容易发生溢出的问题,这是历史原因造成的。你现在只是学习,只要知道这回事并加以注意,还是用标准库函数好了。

热心网友 时间:2023-10-11 11:15

自定义函数多了,解决办法就是把函数单独写在一个头文件里,在主函数前包含这个头文件就行了;在自定义函数中调用另一个自定义函数,要保证被调用的自定义函数在主调函数前定义,否则就要在主调函数中声明。不然就存在你说的问题。追问你说“”在自定义函数中调用另一个自定义函数,要保证被调用的自定义函数在主调函数前定义“”
在主函数声明也没用啊,他提示错,说是没命名字符,我将那个声明函数复制一份给,那个自定义函数,就可以运行了

追答在主函数中声明不能解决这个问题,若fun1在fun2后面定义,那么fun2要调用fun1的话得在fun2中声明fun1,否则只能将fun1定义在 fun2前面。我说的是在“主调函数中”声明,不是在“主函数”中声明……

热心网友 时间:2023-09-19 10:17

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

举例如下:

#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的大部分字符串函数都没有做边界检查,容易发生溢出的问题,这是历史原因造成的。你现在只是学习,只要知道这回事并加以注意,还是用标准库函数好了。

热心网友 时间:2023-09-19 10:17

自定义函数多了,解决办法就是把函数单独写在一个头文件里,在主函数前包含这个头文件就行了;在自定义函数中调用另一个自定义函数,要保证被调用的自定义函数在主调函数前定义,否则就要在主调函数中声明。不然就存在你说的问题。追问你说“”在自定义函数中调用另一个自定义函数,要保证被调用的自定义函数在主调函数前定义“”
在主函数声明也没用啊,他提示错,说是没命名字符,我将那个声明函数复制一份给,那个自定义函数,就可以运行了

追答在主函数中声明不能解决这个问题,若fun1在fun2后面定义,那么fun2要调用fun1的话得在fun2中声明fun1,否则只能将fun1定义在 fun2前面。我说的是在“主调函数中”声明,不是在“主函数”中声明……

热心网友 时间:2023-09-19 10:18

以楼上的方法可以解决几乎所有的函数调用申明的问题。不能解决那就肯定是你代码写错了。贴下代码吧追问代码太长发不了

热心网友 时间:2023-09-19 10:19

你建的什么工程啊,这么牛叉。
你的添加分组2所在的那个函数怎么跟上一个函数的}放在一行上了。

热心网友 时间:2023-09-19 10:19

可以将所有函数在main前声明,在main后实现

热心网友 时间:2023-10-11 11:16

以楼上的方法可以解决几乎所有的函数调用申明的问题。不能解决那就肯定是你代码写错了。贴下代码吧追问代码太长发不了

热心网友 时间:2023-10-11 11:16

你建的什么工程啊,这么牛叉。
你的添加分组2所在的那个函数怎么跟上一个函数的}放在一行上了。

热心网友 时间:2023-10-11 11:17

可以将所有函数在main前声明,在main后实现
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
肺气肿吃什么食物最好 吃什么对肺气肿好 肺气肿老人吃什么水果好 世界乐坛唱功排行? 全球唱功排名? 全球唱功排名 MariahCarey与CelineDion谁唱歌唱得好些?或者谁的唱功较好? Mariah Carey 与 Celine Dion谁唱歌唱得好些?或者谁的唱功较好 国家水费多少钱一吨 国家水费标准是多少一吨?多少水才算一吨 水费是多少钱一吨 vs2010怎么调用另一个项目的函数? 供应链管理8大关键指标 产品重要度指标,简称为 互联网产品的16个关键业务指标 生产产品最重要的一个指标是 解决中蜂格子箱闷热方法 彩虹岛飞翔石怎么获得 彩虹岛飞翔石获得方法 reno712+256的手机多少钱为什么待机时间短 关于文员,怎么制表 文员怎样制表《简单的》? 太阳能灯是不是只有面对太阳才可以发挥最大吸收功能,如果是阴天的话灯吸收不充分亮度就会受到影响? 当一个文员要学会哪些?最基本的制表应该怎么制? fashiontv护肤品属于 科沃斯充电红黄灯闪报警 科沃斯扫地机器充电绿灯闪 科沃斯扫地机器充电时为啥灯一直闪 苏教版高一化学课件 高一化学教学课件 以前的怀表怎么校对时间 阔腿裤配什么上衣好看 时髦就要这么穿 vs2010使用main函数 在VS里面怎么调用其他cpp文件里面已经编写好的函数或者类。我用的12应该和08、05版的大同小异吧。C++编写 VS2010中 ASP页面里超链接怎样调用后台C#里的函数? vs2013 用MFC做界面时函数调用问题 幼儿园学期个人工作总结 sin邮箱登录问题 谁能帮忙注册一个ITUNES STORE 中国的账号 邮箱 Stephanie0020@sina.com 急用!!!!! 跪求大哥大姐帮我注册个itunes stone帐号!急!!!我的邮箱是lst751106@sin a.cn (物理问题)夸克还能再分吗? 求以《党在我心中》为题目的作文,要求3000字,最好是自己写的,谢谢,好的追加分 足金和彩金区别 广州盈科国际旅行社有限公司怎么样? 盈科美辰国际旅游社有限公司南通开发区科兴路1号营业部怎么样? 盈科美辰国际旅行社有限公司杭州分公司怎么样? 盈科美辰国际旅行社有限公司清远分公司怎么样? 盈科美辰国际旅行社有限公司厦门市香莲里营业部怎么样? 盈科美辰国际旅行社有限公司郑州市大学路营业部怎么样? 盈科美辰国际旅行社有限公司南京铁路北街营业部怎么样? 盈科美辰旅行社有限公司会昌营业部怎么样? 元是什么意思 元是什么意思古文