使用checked語句防止資料溢位

2022-01-21 18:57:47 字數 2311 閱讀 5180

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

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

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

checked

checked 有兩種使用方法:

1.作為操作符來使用

inta 

=int

.minvalue;

intc 

=checked

(a--

);執行的時候會丟擲異常:

2.檢查一大塊**:

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

checked

如下圖:

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

也是兩種使用;

1.作為運算子:

inta 

=int

.minvalue;

intc 

=unchecked

(a--

);這樣子就不會拋異常了

2.檢查一大塊**

unchecked

也不拋異常:

/checked 和/checked-

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

溢位檢查 /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 美味 使用checked語句防止資料溢位

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

PHP程式中的sql語句防止POST資料注入問題

本例項模仿使用者登入時查詢資料庫的場景 sql select from user where username and userpass md5 post userpass mysql real escape string unescaped string 轉義 sql 語句中使用的字串中的特殊字元...

使用jdbc拼接條件查詢語句時如何防止sql注入

使用jdbc拼接條件查詢語句時如何防止sql注入 最近公司的專案在上線時需要進行安全掃瞄,但是有幾個專案中含有部分老 運算元據庫時使用的是jdbc,並且竟然好多都是拼接的sql語句,真是令人抓狂。在具體改造時,必須使用preparedstatement來防止sql注入,普通sql語句比較容易改造,本...