社区
C语言
帖子详情
为什么不报错?
treeroot
2006-03-13 01:19:16
我声明没有返回值的方法返回一个值竟然都可以,声明有返回值的也可以没有return语句
都只是一些警告而已,竟然可以编译运行,怎么回事,难道是编译器的问题(VC6.0)
void f1(){
return 1;
}
...全文
188
8
打赏
收藏
为什么不报错?
我声明没有返回值的方法返回一个值竟然都可以,声明有返回值的也可以没有return语句 都只是一些警告而已,竟然可以编译运行,怎么回事,难道是编译器的问题(VC6.0) void f1(){ return 1; }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
anguofeng
2006-03-13
打赏
举报
回复
好像在6.0里的确是不报错
但是在gcc里会报错的
c++因为有函数重载的问题所以对函数的返回值和参数检查会特别严格
jixingzhong
2006-03-13
打赏
举报
回复
有警告就差不多了 ...
不过,C++相比于C还是有很多这方面的限制的 ...
cenlmmx
2006-03-13
打赏
举报
回复
..
goodluckyxl
2006-03-13
打赏
举报
回复
这个返回的问题告警和报error只要报信息就不关编译器的好坏
如果说完全没有反应的那可以定义为烂编译器
原因是这样的:
就那楼主的例子, 无返回值,在函数调用中R0-R7作为通用寄存器
会当作变量返回的地址区
你return 1 最坏的情况 编译器往r0写了数据作为返回值
但是当真正调用完毕后因为根据实际函数返回时检测出无参数类型
就不需要把R0当作参数返回
同理在有返回时没有return,最终会选择r0返回时 最坏情况里面的值非理想值而已
而编译器已经尽到责任
liweiswin
2006-03-13
打赏
举报
回复
警告 noname.c 5: void类型的函数不应有返回值在 f1 函数中
这是我在WINtc下编译的警告
ykzhujiang
2006-03-13
打赏
举报
回复
在C语言中这样做是可以的,但是在C++里面是不行的。
这是因为C语言中对于函数签名没有将参数包括在内,当该函数所在的编译单元被编译后,将会生成一个函数,名字类似_f1,对于其参数是不表示在其中的。这也是C语言中一个比较重要的问题,因为他导致了不安全性。并且在C语言中对于外部函数的检查比较松,比如一个函数void f(int),在另外一个文件中可以按照void f(float)等等的方法进行调用而不会报错,这样虽然编译可以通过,但是实际上是有问题的,会造成很难发现的错误。
然而在C++中,函数的签名包括了参数,这样前面的两个函数就会被编译成_f_int和_f_float的形式,这样程序就会有一个link错误,因为他们的函数签名时不一样的。
iamcaicainiao
2006-03-13
打赏
举报
回复
应该就是编译器的问题。 vc6.0真的很烂。
ouyh12345
2006-03-13
打赏
举报
回复
在偶的编译器(VC6SP6)里,有返回值的不返回则有错误
Java之泛型 再学习 为什么泛型会
报错
?为什么需要包装类?为什么又要有基本数据类型?
话说 KK 今日遇到了泛型,当 KK 想将泛型改为基本数据类型的时候,编译器
报错
了。 咦?这是为什么?为什么会
报错
?—— KK 很疑惑 原来,泛型必须是包装类类型,也就是只能代表引用类型,而不能是基本数据类型,也就是不能是原始数据类型,比如 long / int / short / byte / double / float / boolean / char ,这些都是不能被引用了。 噢~...
运行
报错
debug不
报错
?事务导致时序性大问题!
运行
报错
debug不
报错
?事务导致时序性大问题! 今天在测试自己还未上线的代码时,突然发现了重大问题程序直接运行结果不符合预期,但是 debug的结果却是复合预期的! 问题表现 进行数据变更操作的时,正常运行查出旧数据.想要debug发现问题具体是发生在哪里.debug的结果却完全没问题. [伪代码] 我的代码实现效果是内存缓存,所以在多实例的情况下需要使用广播功能去通知多实例更新内存缓存. @Override @Transactional(rollbackFor = Excep
java中输入小数为什么老是
报错
?求各位大神帮助!
有大神知道这里为什么
报错
吗?我输入整数一点问题都没有,但是每次输入小数都会报这个错误。
为什么两个byte类型的数据相加会
报错
?
如下程序1: byte b1 = 4; byte b2 = 3; byte b3; b3 = b1 + b2; System.out.println(b3); 上述程序在编译时会
报错
,提示内容为:int转换为byte类型时可能会造成精度的缺失。 而下面程序2、3均不会
报错
程序2: int b1 = 4; int b2 = 3; int b3; b3 = b1 + b2; System.out.println(b3); 程序3: byte b1 = 127; byte b2 = 5; int b3; Sys
SAP MM 明明已经扩展供应商到采购组织下,采购订单里还是
报错
?
SAP MM 明明已经扩展供应商到采购组织下,采购订单里还是
报错
? 如下的PO 4400000069,处于HELD状态。ME22N试图保存它为一个正式的采购订单,
报错
说供应商没有在采购组织下维护, 使用事务代码BP去显示供应商 GENL主数据, 供应商主数据已经扩展到了采购组织GECS下了!为什么还是报这种错误? 经过检查主数据,没发现明显的问题。不过我发现该供应...
C语言
70,026
社区成员
243,262
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章