为了账号安全,请及时绑定邮箱和手机立即绑定

Go 是否优化了无法访问的 if 语句?

Go 是否优化了无法访问的 if 语句?

Go
吃鸡游戏 2021-09-27 21:09:33
Go 非常遗憾缺乏内置断言。我想以这种方式实现它们:const ASSERT = truefunc SomeFunction() {        if ASSERT && !some_condition_that_should_always_be_true() {                panic("Error message or object.")        }}我的问题是如果我定义了 if 语句会被优化const ASSERT = false吗?
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

正如人们在对您的问题的评论中所指出的那样,它是特定于实现的。


gc 确实删除了它。您可以使用构建程序-gcflags '-S'并查看该ASSERT部分不在二进制文件中。


例如,使用 编译以下代码-gcflags '-S',您将看到第 8 行和第 9 行的代码被包含在内,但更改Assert为 false,并且它们不会出现在 asm 列表中。


package main


const Assert = true


var cond = true


func main() {

    if Assert && !cond {

        panic("failed")

    }

}

编辑:


至于 gccgo,它删除了-O1上面的代码。您可以通过编译相同的代码来查看它


go build -compiler gccgo -gccgoflags '-O1' main.go

然后做


objdump -S main

查看带注释的程序集。


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信