[英]clang static analyzer questions
我對做決定感到困惑。
例如,當我像這樣編寫代碼“test.c”時。
int main(void){
int b = 2;
int c = 0;
int d = b/c;
printf("d: %d\n", d);
return 0;
}
然后,我輸入了命令clang --analyze test.c
然后語句warning: Division by zero [core.DivideZero]" appeared
之后,我輸入了命令clang test.c
。 然后沒有警告出來。 但是,當我運行這個程序時,出現錯誤Floating point exception(core dumped)
。
在這種情況下,哪個是正確的? 它是真陽性還是假陽性? 有人可以向我解釋嗎?
然后,我輸入了命令
clang --analyze test.c
然后語句warning: Division by zero [core.DivideZero]" appeared
Clang 靜態分析器正確地確定程序中有一個被零除的地方。
之后,我輸入了命令
clang test.c
。 然后沒有警告出來。
Clang按照C標准編譯程序。 C 標准不要求編譯器警告您程序中存在被零除的情況。
但是,當我運行這個程序時,出現錯誤
Floating point exception(core dumped)
。
該程序是按照 C 標准執行的。 對於除法,C 標准表示“如果第二個操作數的值為零,則行為未定義”。 由於行為未定義,C 標准允許使用錯誤消息(甚至是關於“浮點異常”的誤導性消息)中止程序。
在這種情況下,哪個是正確的? 它是真陽性還是假陽性?
這三種行為都是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.