请教thinking in c++上面的一个问题。多谢!

mre 2003-09-05 11:06:07
刚开始看thinking in c++
在thinking in c++ 的网站上下载的代码,但是在编译的时候有warning C4244: 'return' : conversion from 'double' to 'float', possible loss of data
和warning C4508: 'main' : function should return a value; 'void' return type assumed
请问第一个warning 是怎么回事?
还有第二个问什么thinking in c++中说main 的类型用int 呢?

这是代码:
extern int i; // Declaration without definition
extern float f(float); // Function declaration

float b; // Declaration & definition
float f(float a) { // Definition
return a + 1.0;
}
...全文
22 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mre 2003-09-06
  • 打赏
  • 举报
回复
是dev-cpp?
我新安装上这个试了试,果然没有,而且如果把main的类型改为viod 的啊,或出现提示:
`main' must return `int'
同时把1.0改为1.0f在vc下也没有warning 了
多谢大家指教,特别是aflyinghorse()
mre 2003-09-06
  • 打赏
  • 举报
回复
我用的vc++6
设置一般都是默认的。
aflyinghorse 2003-09-06
  • 打赏
  • 举报
回复
我在dec-cpp和vc6下试你的代码,都没有警告,
以上转换是隐试进行的,
如果有精度损失,则多数编译器会给出警告的。
aflyinghorse 2003-09-05
  • 打赏
  • 举报
回复
你用的是什么编译器?
我用dec-cpp编译
float f(float a) { // Definition
return a + 1.0;
}
没有warning
这其实是标准转换
mre 2003-09-05
  • 打赏
  • 举报
回复
但是这段代码却没有warning
#include<iostream>
using namespace std;
void main()
{
float a=1l;
float b;
b=1.0+a;
cout<<b<<endl;
}

aflyinghorse 2003-09-05
  • 打赏
  • 举报
回复
c++标准规定main有两种形式
int main()
int main(int argc,char *arhv[])

第一个问题
return a + 1.0;
其中a为float型,而1.0默认为double型的,所以a会被提升为double型
因此表达式a + 1.0结果的类型为double
但float所占内存字节数小于double,所以从double转换为返回值类型float会
可能会丢失精度,因此会有警告。
可以把返回值改为double或者强制转换(double)a + 1.0
zfbt 2003-09-05
  • 打赏
  • 举报
回复
第一个问题是因为在程序中return出去的变量的类型与函数定义的类型不一至!把函数定义的返回值的类型改为double就OK了!
main()函数的返回值可以是任意的,main也是一个函数啊,也是用户自定义的的啊,所以返回值是什么都可以!:)

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧