checked文を使ってデータが溢れないようにする解決方法


C((Microsoft)には現在のコンテキストにおける数値演算と数値変換がオーバーフローするかどうかを判断するためのキーワードchecedがある。定数オーバーフローなら、コンパイルする時に見つけられます。変数オーバーフローなら、運転中にOverflowe Exceptionを投げます。数値演算には:++があります   ―   - (unary)   +   -   *   /これがあれば、データが溢れる心配はありません。checkedcheckedには2つの使用方法があります。1.オペレータとして

int a = int.MinValue;
int c = checked(a--);
を使って実行すると、異常を投げます。
image 2.大きなコードを確認します。このように中のコードを全部チェックします。
image
uncheckedとchecedは対応して、もう一つのuncheckedキーワードがあります。検査をキャンセルします。二種類の使用です。1.演算子として:

checked
{
    int a = int.MinValue;
    int c = a--;
}
このようにすれば、例外なく投げられます。
image
2.大きなコードを確認してください。

int a = int.MinValue;
int c = unchecked(a--);
も異常を投げません。
image/checkedと/checcked-もしコードの中でいつもこんなに多くのchecked語句を書くならば、とても嫌ですか?コンパイルパラメータがあれば良いですが、設定だけはチェックします。マイクロソフトもこれを思い付きました。/checkedパラメータを提供して作って、キャンセルに来ました。オーバーフローチェック/checkedは、/checked+•オーバーフローチェック/checked-もちろん、すべてのチェックをキャンセルしたいのですが、コマンドラインパラメータは/checked-

unchecked
{
    int a = int.MinValue;
    int c = a--;
}
です。cscはコンパイラcsc.exeで、t 2.1 sはコンパイルされたコードファイルです。多くの人がVisual Studioを使うと思います。VSでも設定できます。ステップは以下の通りです。VSL 2010を例にします。プロジェクトで右クリックしてメニューProptiesを選択します。
image
2です。「Build」をクリックして、「Advinced」をクリックします。
image
3です。開いているダイアログで、「Check for arthmetic overflow/under flow」にチェックを付けます。
imageいくつかの注意1.hecked文は、現在のコンテキストのコードに対してのみ有効である。すなわち、呼び出した関数の内部検査は行われない。

csc t2.cs /checked
このコードにあります。異常を走ることはありません。キーワードはTestFunの内部に影響がありません。このようにする必要があるなら、TestFunの内部にcheckedキーを入れるか、グローバルスイッチを開くか(コンパイルパラメータ/checkedまたはVSで設定)。2.checked、uncheckedのキーワードは左のシフトと右のシフトがオーバーフローしているかどうかを確認しません。

static void Main(string[] args)
{
    checked
    {
        TestFun();
    }
}
static void TestFun()
{
    int a = int.MinValue;
    int c = a--;
}
実行は異常を投げません。
image
3.性能を考慮するために、デバッグ時に検査を行うことを提案します。Releaseの場合は検査をしません。