2016-04-14 8 views
2

Ist es möglich, Frama-C Slicing-Plugin zu verwenden, um für mehr als eine Behauptung Slice?Slicing für mehrere Assert

z. Geben Sie den folgenden Code:

#include "assert.h" 

int main() { 
    double a=3; 
    double b=4; 
    b=a+b; 
    double c=123; 

//@ assert(b>=0); 

    double d=a/b; 
    c=a; 

//@ assert(c==0); 

    if (a<b) 
     a=c; 

    return 0; 
} 

Ich möchte die Scheibe für beide Assertions erhalten.

Antwort

3

Option -slice-assert main wählt als Slicing-Kriterium alle Aussagen der Funktion main. In der Tat können Sie nicht direkt auswählen, in Bezug auf nur eine von ihnen zu schneiden. Sie müssen auf //@ slice pragma expr b; für die erste oder //@ slice pragma expr c; für die zweite zurückgreifen.

Allgemeiner gesagt, sind Slicing-Kriterien kumulativ: Je mehr Kriterien Sie angeben, desto mehr Code wird beibehalten.

+0

Danke für die Antwort! Das hilft sehr. Gibt es auch die Möglichkeit, für alle Aussagen des globalen Geltungsbereichs und nicht für bestimmte Funktionen zu unterscheiden? – Paddre

+3

@Paddre Technisch gesehen gibt es keine Assertion auf globaler Ebene: Sie sind an eine Aussage gebunden. Meinst du alle Behauptungen aller Funktionen im Programm? Wenn ja, können Sie die Verknüpfung '@all' verwenden, anstatt alle Funktionen als ein kommagetrenntes Listenargument von' -slice-assert' zu benennen. – Virgile

+0

Letzteres hat es genagelt. Danke :-) – Paddre