Goにはテキストの前処理はありません。Javaや他のJavaと同様に、コードのブロックを削除したい場合は、const
値を使用してコードを。で囲むことができますif
。
これを行うと、コンパイラはASTから生成されたコードからコードを最適化しますか?または、条件は毎回実行されますか?
編集:複製したい場合#ifdef
、それを行うための最良の方法は何ですか?
Goにはテキストの前処理はありません。Javaや他のJavaと同様に、コードのブロックを削除したい場合は、const
値を使用してコードを。で囲むことができますif
。
これを行うと、コンパイラはASTから生成されたコードからコードを最適化しますか?または、条件は毎回実行されますか?
編集:複製したい場合#ifdef
、それを行うための最良の方法は何ですか?
#ifdef
内部のコードは常に何があってもコンパイルされるため、一定の条件を持つ if ステートメントは と同じではありません。ただし、コンパイラは可能な場合は最適化を行います。このプログラムを考えてみましょう:
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 ,
デッドコードはなくなったので、リターンするだけです。
コードの一部を実際に条件付きでコンパイルする必要がある場合は、ビルド システムを使用して実行することをお勧めします。