4

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

如果我这样做,编译器是否会优化来自 AST 和生成代码的代码?还是每次都执行条件?

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

4

1 回答 1

9

条件不变的 if 语句不一样,#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     ,

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

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

于 2012-06-29T03:50:09.703 回答