一些信號源同時發現這樣的代碼:檢查如果無符號小於零
void foo(unsigned int i)
{
if(i<0)
printf("Less then zero\n");
else
printf("greater or equ\n");
}
int main()
{
int bar = -2;
foo(bar);
return 0;
}
,我認爲是沒有意義的,但可能有某些情況下(安全性?),使這個檢查SensAble公司?
謝謝您的回答!你增強了我的信心。但有人寫了這個。可能有一些平臺或編譯器認爲另一種方式? – dtoch
有可能是根據您的系統上int的大小符號/無符號轉換的精確值的一些輕微的變化(見jonnyGold和wap26鏈接到答案)。但是在這種情況下,所有編譯器都會輸出表現出相同控制流行爲的可執行文件。換句話說 - 沒有:)寫這個的人可能沒有注意到這種控制流的情況會發生(一個錯誤),否則他們正在試驗。 – erapert
似乎你是對的。 我做了一些檢查。 GCC只是刪除任何檢查和寫入字符串: 'FOO: pushl%ebp的 MOVL%ESP,EBP% subl $ 24%ESP MOVL $ .LC0,(%ESP) 呼叫提出 離開 ret' 鐺生成檢查,但: 1.無效美孚(無符號整型ⅰ) 直列'FOO + 19:宰0x804841f' 2.無效美孚(帶符號的int i)以: 直列'FOO + 19:JGE 0x804841f ' –
dtoch