水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
1/1
|
转到
主题:一个函数没有返回值,会发生什么?标准有什么规定吗?
楼主
|
Madlee
|
2021-06-16 11:31:19
|
展开
我的一个一个函数,忘了return,但这个返回值没用。gcc O3优化直接挂了
有时候 segment fault. 有时候就直接进入一个无限循环。
后来加上一个return就一切正常了。
double foo() { // blablabla // 忘了return } void main() { foo(); // 但没有用到foo的返回值。 }
原来以为没用到返回值的话不return也无所谓。
不知道标准有没有对此做什么规定?
--
FROM 58.33.198.*
2楼
|
Madlee
|
2021-06-16 12:36:53
|
展开
warning而已
【 在 poikilotherm 的大作中提到: 】
: 这能编译通过?
--
FROM 58.33.198.*
7楼
|
Madlee
|
2021-06-16 16:10:05
|
展开
算了,bug已经改了就懒得折腾了。就是纯好奇问问。
【 在 z16166 的大作中提到: 】
: 看优化后的汇编代码
--
FROM 58.33.198.*
8楼
|
Madlee
|
2021-06-16 16:10:40
|
展开
嗯,估计是优化的问题,不优化就没问题。
【 在 ziqin 的大作中提到: 】
: 开了优化基本就是玄学
--
FROM 58.33.198.*
10楼
|
Madlee
|
2021-06-16 17:18:24
|
展开
生亦有涯而知亦无涯
所以,得过且过吧,呵呵。
【 在 z16166 的大作中提到: 】
: 不求甚解,哈哈
: 优化也不会改变语义
:
--
FROM 58.33.198.*
13楼
|
Madlee
|
2021-06-17 12:03:46
|
展开
这已经不是我所认识的C++了。 -_-b
【 在 mvtec 的大作中提到: 】
: C++17加入了
: [[nodiscard]] attribute
:
--
FROM 58.33.198.*
14楼
|
Madlee
|
2021-06-17 12:05:32
|
展开
所以就想问问标准里这是不是未定义行为。我觉得不是。
返回一个乱七八糟值我是可以理解的,但是直接segment
fault有些太自由主义了。
【 在 ArchLinux 的大作中提到: 】
: 你不能期望对未定义行为进行优化有你预想的结果。
:
--
FROM 58.33.198.*
18楼
|
Madlee
|
2021-06-18 08:58:52
|
展开
学习了,谢谢。
【 在 z16166 的大作中提到: 】
: 标准对这种的定义就是UB。
: 有些情况下需要写这种不返回东西的函数,比如下面这个有人举了个需要直接abort而不返回任何东西的例子,来说明规范中为啥要定义成UB而不是强制为error。
:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43943
: ...................
--
FROM 58.33.198.*
22楼
|
Madlee
|
2021-06-18 16:54:23
|
展开
不行,是个很复杂系统里的一个小部分,每次修改一下都会出现一个新情况。
【 在 dormouseBHU 的大作中提到: 】
: 无法复现你说的这个问题。。。
: 能贴一个可以复现这个问题的最小代码吗?
:
--
FROM 58.33.198.*
23楼
|
Madlee
|
2021-06-18 16:54:55
|
展开
嗯,还是要把warning当成error来处理
【 在 lambdai 的大作中提到: 】
: 别折腾UB了
: 反而是应该升级编译器或者构建系统,这么明显的行为没有报出错来,多影响心情啊
:
--
FROM 58.33.198.*
1/1
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版