| Hjem | Hardware | Netværk | Programmering | software | Fejlfinding | systemer | 
Programmering  
  • C /C + + Programming
  • Computer Programmeringssprog
  • Delphi programmering
  • Java programmering
  • JavaScript Programmering
  • PHP /MySQL programmering
  • Perl programmering
  • Python Programming
  • Ruby Programming
  • Visual Basics Programmering
  •  
    Computer Viden >> Programmering >> C /C + + Programming >> Content
    Hvad er forskellen mellem en forudsætning og postkondition i C -programmering?
    I C -programmering (og programmering generelt) er forudsætninger og postkonditioner påstande om tilstanden af ​​et programs variabler eller datastrukturer, der skal indeholde før og efter udførelsen af ​​henholdsvis en funktion. De er vigtige for at designe robust og pålidelig kode, især i komplekse systemer. Mens C ikke har indbygget nøgleordsstøtte til formelle forudsætninger og postkonditioner som nogle andre sprog (f.eks. Kontrakter i Eiffel), er koncepterne stadig afgørende og kan implementeres ved hjælp af påstande og kommentarer.

    Her er en sammenbrud af forskellen:

    1. Forudsætning:

    * Definition: En betingelse, der skal være sand * Før* kaldes en funktion for at funktionen fungerer korrekt og garanterer dens opførsel. Det er * opkalderens * ansvar at sikre, at forudsætningerne er opfyldt. Hvis en forudsætning krænkes, er funktionens opførsel udefineret; Det kan gå ned, give forkerte resultater eller opføre sig uforudsigeligt.

    * Formål:

    * afklar de forventede input og miljø: Forudsætninger dokumenterer, hvad en funktion forventer. Dette gør funktionen lettere at forstå og bruge.

    * forhindre fejl og bugs: Ved at kontrollere forudsætninger (ved hjælp af påstande) kan du registrere og forhindre fejl tidligt i udviklingsprocessen.

    * Aktivér optimering: Hvis en funktion ved, at visse betingelser altid vil være sandt, kan den udføre optimeringer, der ellers ikke ville være sikre.

    * Dokumentation: Klar dokumentation giver andre udviklere mulighed for at bruge funktionen korrekt.

    * ansvar: Funktionens * opkalder * er ansvarlig for at sikre, at alle forudsætninger er sandt, før de kalder funktionen.

    * Eksempel:

    `` c

    #Include

    #include

    // funktion til at beregne faktoren for et tal

    int factorial (int n) {

    // forudsætning:n skal være ikke-negativ

    hævde (n> =0);

    if (n ==0) {

    retur 1;

    } andet {

    return n * factorial (n - 1);

    }

    }

    int main () {

    int resultat =factorial (5); // forudsætning tilfreds

    printf ("Factorial of 5:%d \ n", resultat);

    // Factorial (-1); // forudsætning krænket! Dette vil medføre en påstandssvigt.

    return 0;

    }

    `` `

    I dette eksempel har funktionen `Factorial 'en forudsætning for, at` n` skal være ikke-negativ. `Assert (n> =0)` erklæring kontrollerer denne forudsætning. Hvis `n` er negativ, vil påstanden mislykkes, og programmet afsluttes (i en debug build).

    2. Postkondition:

    * Definition: En betingelse, der skal være sand * Efter* en funktion er udført med succes. Den beskriver programmets tilstand (variabler, datastrukturer, returværdi), efter at funktionen har afsluttet sin opgave. Det er * -funktionens * ansvar at sikre, at postkonditionerne er opfyldt, * antager * forudsætningerne blev opfyldt.

    * Formål:

    * garanterer funktionens effekt: Postkonditioner dokumenterer, hvad funktionen * lover * at gøre.

    * Bekræft korrekthed: Ved at kontrollere postkonditioner (ved hjælp af påstande) kan du verificere, at funktionen producerer de forventede resultater.

    * lette fejlfinding: Hvis en postkondition overtrædes, indikerer det en fejl inden for selve funktionen.

    * Dokumentation: Klar dokumentation giver andre udviklere mulighed for at forstå funktionens opførsel.

    * ansvar: Selve * -funktionen * er ansvarlig for at sikre, at alle postkonditioner er sandt, før de vender tilbage.

    * Eksempel:

    `` c

    #Include

    #include

    // funktion til at beregne kvadratet for et tal

    int firkant (int x) {

    int resultat =x * x;

    // Postcondition:Resultat skal være ikke-negativt (hvis X er et heltal)

    hævde (resultat> =0); // Dette kan mislykkes på grund af heltaloverløb, hvis X er meget stort.

    Returresultat;

    }

    int main () {

    int resultat =firkant (5);

    printf ("firkant med 5:%d \ n", resultat);

    int stor_number =100000; // kan forårsage overløb

    resultat =firkant (stor_number); // postkondition kan mislykkes på grund af overløb.

    printf ("firkant med %d:%d \ n", stor_number, resultat);

    return 0;

    }

    `` `

    I dette eksempel har funktionen `firkantet 'en postkondition, som' resultat 'skal være ikke-negativt (forudsat at' x 'er et heltal). `Assert (resultat> =0)` erklæring kontrollerer denne postkondition. Hvis resultatet er negativt (for eksempel på grund af heltaloverløb), vil påstanden mislykkes.

    Nøgleforskelle opsummeret:

    | Funktion | Forudsætning | Postkondition |

    | ---------------- | -------------------------------------------------- | ---------------------------------------------------- |

    | timing | Kontrolleret * før * Funktionen udføres | Kontrolleret * efter * funktionen udføres |

    | ansvar | Opkalder af funktionen | Funktion i sig selv |

    | Formål | Definer forventet input og miljø | Definer garanteret opførsel og effekt af funktionen |

    | overtrædelse | Angiver et problem i * opkaldskoden * | Angiver et problem * inden for funktionen * |

    | garantier | Funktionen kan fungere korrekt | Funktionen har opnået sin tilsigtede effekt |

    Sådan implementeres i C:

    Da C ikke har indbygget støtte til forudsætninger og postkonditioner, er standardmetoden at bruge:

    1. :Dette er den mest almindelige måde at kontrollere betingelserne på. Påstande er typisk aktiveret i debug-builds (f.eks. Med `-ddebug`-kompilatorflagget) og deaktiveret i udgivelsesbygninger. Dette betyder, at kontrollerne sker under udviklingen, men er optimeret væk i det endelige produkt for at undgå præstationsomkostninger.

    2. `#ifdef debug` -blokke :Du kan også bruge `#IFDEF Debug 'til betinget at omfatte mere kompleks forudsætning og postkonditionskontrol, der kan involvere mere end en simpel sammenligning.

    3. kommentarer :Selv hvis du ikke bruger påstande, er det vigtigt at dokumentere forudsætninger og postkonditioner i kommentarer for at gøre din kode mere forståelig.

    4. testrammer: Overvej at bruge testrammer, der understøtter kontrol før/efter konditionen for at lette enhedstest.

    Eksempel med kombinerede forudsætninger, postkonditioner og kommentarer:

    `` c

    #Include

    #include

    /**

    * @Brief beregner kraften i et tal (base hævet til eksponent).

    *

    * @param base basisnummeret (heltal).

    * @param eksponent eksponenten (ikke-negativt heltal).

    *

    * @pre eksponent> =0 (eksponent skal være ikke-negativ).

    * @pre base! =0 || Eksponent! =0 (base og eksponent ikke begge 0 - undgår udefineret opførsel)

    *

    * @post returnerer base, der er hævet til eksponentens magt.

    * @post hvis eksponent er 0, er resultatet 1 (undtagen base =0, som ikke er tilladt).

    *

    * @Return resultatet af base hævet til eksponentens magt.

    * Returnerer 1 Hvis eksponent er 0.

    */

    int magt (int base, int eksponent) {

    // forudsætninger:

    hævde (eksponent> =0);

    hævde (base! =0 || eksponent! =0); // forhindre udefineret opførsel med 0^0

    int resultat =1;

    for (int i =0; i resultat *=base;

    }

    // postkonditioner:

    if (eksponent ==0) {

    hævde (resultat ==1); // Kontroller for basiskasse

    }

    Returresultat;

    }

    int main () {

    int resultat =magt (2, 3); // 2^3 =8

    printf ("2^3 =%d \ n", resultat);

    Resultat =strøm (5, 0); // 5^0 =1

    printf ("5^0 =%d \ n", resultat);

    // strøm (0,0); // Dette vil udløse påstanden.

    return 0;

    }

    `` `

    Fordele ved at bruge forudsætninger og postkonditioner:

    * Forbedret kodekvalitet: De tvinger dig til at tænke nøje over antagelserne og garantier for dine funktioner.

    * lettere fejlfinding: Påstande hjælper med at fange fejl tidligt og præcisere kilden til problemer.

    * bedre dokumentation: De dokumenterer helt klart den forventede opførsel af dine funktioner.

    * øget vedligeholdelighed: De gør din kode lettere at forstå og ændre, hvilket reducerer risikoen for at indføre fejl.

    * formel verifikation: I nogle tilfælde kan forudsætninger og postkonditioner bruges med formelle verifikationsværktøjer til at bevise rigtigheden af ​​din kode.

    Ved at inkorporere forudsætninger og postkonditioner i din C -kode (selvom du bare bruger kommentarer og påstande), kan du skrive mere robust, pålidelig og vedligeholdelig software.

    Forrige :

    næste :
      Relaterede artikler
    ·Hvordan man skriver Word Equivalent af en check Beløb …
    ·Sådan bruges Funktion Skabeloner i C + + 
    ·Datatyper til Turbo C 
    ·Sådan Beregn Expressions Med Increment & Decrement Ope…
    ·Sådan vises procenter i C + + 
    ·Sådan får Koder til Dev -C + + 4.9.9.2 
    ·Sådan oprettes en linket liste i C 
    ·Sådan Rediger Silverlight Datagrid 
    ·Hvordan man kompilerer en CPP med en header fil 
    ·Sådan får du en funktion Prototype i DLL 
      Anbefalede Artikler
    ·Tutorial på Enterprise Java Bean 
    ·Ydre Funktion og Omfang i Python 
    ·Hvordan indsætter jeg Delprojekter i NetBeans 
    ·Sådan bruges Autofilter i VBA 
    ·Sådan vises et Word-dokument med PHP 
    ·Sådan Konverter VBA til Python 
    ·Sådan ændres en PHP variabel med JavaScript 
    ·Sådan Adskil en event handler i jQuery 
    ·Sådan Update A Display Field Brug JavaScript 
    ·Sådan deaktiveres JavaScript Mens Brug Selen 
    Copyright © Computer Viden https://www.computerdk.com