...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

-debug=の挙動

そういえばデバッグレベルを設定したことなかった.

import std.stdio;
void main()
{
	debug    writeln("void");
	debug(0) writeln(0);
	debug(1) writeln(1);
	debug(2) writeln(2);
}

これを色々な debug オプションを付けて実行すると・・・

>dmd a -debug && a
void
0
1

>dmd a -debug=0 && a
0

>dmd a -debug=1 && a
void
0
1

>dmd a -debug=2 && a
void
0
1
2

デバッグレベル 0 でコンパイルすると,デバッグレベルを指定していない debug{} のコードがコンパイルされない.

まとめ

  • debug(N){} は debug=N に対応する.
  • ただし (N) がないとき -debug=1 と等価,また,N=0 のとき debug{} も除かれて debug(0){} だけがコンパイルされる.

疑問

もしかして,-debug=0 の 0 は Identifier として解釈されている?