読者です 読者をやめる 読者になる 読者になる

Mono: checked キーワードを使わずに、オーバーフローチェックを有効にする

以下の記事で、Visual Studio では checked キーワードを使わなくても、ビルド設定でオーバーフローチェックができるとありました。

Mono でも checked キーワードを使わずにオーバーフローチェックができるかどうか調べてみました。コンパイルオプションの checked で出来ました。

using System;

class Program {
    static int Overflow() {
        int n = int.MaxValue;
        return n + 1;
    }

    static void Main() {
        int n = Overflow();
        Console.WriteLine(n);
    }
}

実行結果です。

$ mcs checked.cs && mono checked.exe
-2147483648
$ mcs -checked+ checked.cs && mono checked.exe 
Unhandled Exception:
System.OverflowException: Number overflow.
  at Program.Main () [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.OverflowException: Number overflow.
  at Program.Main () [0x00000] in <filename unknown>:0

オーバーフローチェックが有効になっていますね。