【发布时间】:2021-12-30 22:30:25
【问题描述】:
我想知道当启用优化(O2 或 O3)时,编译器报告的警告(例如未使用的变量或控制到达非 void 函数的末尾)是否会影响程序(即崩溃)
你能给我一些例子吗?
【问题讨论】:
-
好吧,“控制到达非空函数的末尾”会导致未定义的行为,您可能需要在考虑优化之前修复它。
-
您正在寻找一个编译器诊断示例,它在优化关闭时不伴随程序故障,但在优化打开时伴随程序故障?
-
未使用的变量,没有。不从需要它的函数返回值,是的,它与优化无关,它总是错误的。
-
@dratenik 这是一个很好的例子。编译器似乎认为
foo没有return语句,因此它永远无法返回。因此,main在foo调用后无法到达printf,也无法返回。因此不需要main的ret指令。然后碰巧链接器会将_start直接放在二进制文件中的main之后,因此程序不断流回到_start和main。