簡體   English   中英

clang靜態分析器問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM