繁体   English   中英

const if语句与Go中的#ifdef宏做同样的事情吗?

[英]Do const if statements do the same thing as #ifdef macros in Go?

Go中没有文本预处理。 像Java和其他类似的人一样,如果我想删除一段代码,我可以使用const值并用if包围代码。

如果我这样做,编译器是否会优化AST中的代码并生成代码? 或者每次执行条件?

编辑:如果我想复制#ifdef最好的方法是什么?

如果具有常量条件的语句与#ifdef因为无论如何都始终编译内部代码。 但是,编译器会在可能的情况下对其进行优化。 考虑这个程序:

package main

import (
    "fmt"
)

func main() {
    if false {
        fmt.Println("Hello, world!")
    }
}

如果我们运行go tool 6g -S test.go ,这里是main函数的汇编输出:

--- prog list "main" ---
0000 (test.go:7) TEXT    main+0(SB),$40-0
0001 (test.go:11) RET     ,

死代码消失了所以它只是返回。

如果确实需要实际有条件地编译部分代码,最好通过构建系统来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM