gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:26:04 26 4
gpt4 key购买 nike

不幸的是,Go 缺乏内置断言。我想以这种方式实现它们:

const ASSERT = true

func SomeFunction() {
if ASSERT && !some_condition_that_should_always_be_true() {
panic("Error message or object.")
}
}

我的问题是,如果我定义 const ASSERT = false,是否会优化 if 语句?

最佳答案

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

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

查看带注释的程序集。

关于if-statement - Go 是否优化了无法访问的 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com