c 美味 使用checked語句防止資料溢位

2022-03-22 12:18:38 字數 2297 閱讀 3452

在c#中有乙個關鍵字checked,它用來判斷當前上下文中的數值運算和數值轉換是否會溢位。如是是常量溢位,那在編譯時就能發現;如果是變數溢位,那在執行時會丟擲overflowexception。

數值運算有:++   —   - (unary)   +   -   *   /

有了這個就不用擔心資料溢位了。

checked 有兩種使用方法:

1.作為操作符來使用

int 

a = int.minvalue;

int

c = checked(a--);

執行的時候會丟擲異常:

2.檢查一大塊**

這樣子會對裡面所有的**都做檢查

checked

如下圖:

和checked對應,還有乙個unchecked關鍵字,用來取消檢查。

也是兩種使用;

1.作為運算子

int 

a = int.minvalue;

int

c = unchecked(a--);

這樣子就不會拋異常了

2.檢查一大塊**

unchecked

也不拋異常:

如果**裡總是要寫這麼多checked語句是不是很煩?如果能有乙個編譯引數就好,只有設定了就都會檢查。微軟也想到了這個,它提供了乙個/checked 引數來做,也提供了乙個/checked-來取消。

當然,你想取消所有的檢查也是可以的,命令列引數是/checked-

csc t2.cs /checked
其中csc是編譯器csc.exe , t2.cs 是被編譯的**檔案。

我想很多人是用visual studio吧。vs裡也是可以設定的。

步驟如下,我以vs2010為例,(vs2005,2008差不多)

1。在工程上點右鍵,選擇選單properties

2。點選「build」,再點選「advanced」

3。在開啟的對話方塊中,把「check for arithmetic overflow/underflow」打上勾

1.checked語句只對當前上下文中的**有效,即不對呼叫的函式內部做檢查

static void 

main(string args)

}static void

testfun()

這段**中。不會跑異常,因為checked關鍵字沒有影響到testfun內部。如果需要這麼做的話,要麼在testfun內部加checked關鍵字,要麼開啟全域性開關(加編譯引數/checked或者vs中設定)。

2.checked,unchecked關鍵字不檢查左移和右移是否溢位。

static void 

main(string args)

}

執行不會拋異常:

3.為了效能考慮,建議debug時做檢查,release時不做檢查。

/checked (check integer arithmetic)

arithmetic overflow checking using checked/unchecked

c# 3.0 in a nutshell, 3rd edition

chapter 2.4.5.2. integral overflow

使用checked語句防止資料溢位

在c 中有乙個關鍵字checked,它用來判斷當前上下文中的數值運算和數值轉換是否會溢位。如是是常量溢位,那在編譯時就能發現 如果是變數溢位,那在執行時會丟擲overflowexception。數值運算有 unary 有了這個就不用擔心資料溢位了。checked checked 有兩種使用方法 1....

C 使用帶like的sql語句時防sql注入的方法

本文例項敘述了在拼接sql語句的時候,如果遇到like的情況該怎麼辦。一般採用帶like的sql語句進行簡單的拼接字串時,需要開率遇到sql注入的情況。這確實是個需要注意的問題。這裡結合一些查閱的資料做了初步的整理。如這樣乙個sql語句 select from game where gamename...

C 中goto語句的使用

goto 語句允許把控制無條件轉移到同一函式內的被標記的語句。goto語句的使用 1.保證函式只有乙個出口的原則 2.精簡函式內二元動作的 如同個函式內的malloc 和 free,new 和 delete,加鎖和解鎖等操作 統一跳到函式結尾處釋放 如下例子 void func void if p2...