在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這段**中。不會跑異常,因為checked關鍵字沒有影響到testfun內部。如果需要這麼做的話,要麼在testfun內部加checked關鍵字,要麼開啟全域性開關(加編譯引數/checked或者vs中設定)。main(string args)
}static void
testfun()
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...