true の値

TRUE というCマクロが定義されたヘッダファイルの名前を調べようと、MSDN Library のキーワードに true とタイプして最初に開いたヘルプの注意事項が .NET ネタだった……というだけのメモ。

> tostring -code:C# (int) true
error CS0030: 型 'bool' を型 'int' に変換できません。

> tostring -code:C# Convert.ToInt32(true)
1

> tostring -code:vb CType(True, Int32)
-1

> tostring -code:vb CType(TRUE, Integer)
-1

> tostring -code:vb Convert.ToInt32(True)
1

型無しの変数に格納された True を、CType() も Convert も使用しないで整数評価した場合も、CType() を利用した場合と同様になる。以前にも書いたけど、こういう不一致によってC言語系のプログラマが、

  bool f = ...;
  bool g = ...;

  if (f == false) ...
  if (f != false) ...
  if (((f == false) && (g != false)) != false) ...

みたいな記述をするようになるんですよね。*1 なんのための論理型なのやら。*2

*1:私は、この手の論理値の比較式をみるとカタマルので非常につらい…

*2:論理型以前に、「論理評価には常に比較式を記載しなければいけない」みたいな意識もあるんだと思いますが