|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> C /C + + -programmering >> Content

    Vad är skillnaden mellan en förutsättning och postkondition i C -programmering?

    Vid C -programmering (och programmering i allmänhet) är förutsättningar och postkonditioner påståenden om tillståndet för ett programs variabler eller datastrukturer som bör hålla före och efter exekveringen av en funktion. De är viktiga för att utforma robust och pålitlig kod, särskilt i komplexa system. Även om C inte har inbyggt nyckelordstöd för formella förutsättningar och postkonditioner som vissa andra språk (t.ex. kontrakt i Eiffel), är koncepten fortfarande avgörande och kan implementeras med påståenden och kommentarer.

    Här är en uppdelning av skillnaden:

    1. Förutsättning:

    * Definition: Ett villkor som måste vara sant * Innan* kallas en funktion för att funktionen ska fungera korrekt och garantera dess beteende. Det är * uppringarens * ansvar att se till att förutsättningarna uppfylls. Om en förutsättning kränks är funktionens beteende odefinierat; Det kan krascha, ge felaktiga resultat eller bete sig oförutsägbart.

    * Syfte:

    * klargöra de förväntade ingångarna och miljön: Förutsättningar dokumenterar vad en funktion förväntar sig. Detta gör funktionen lättare att förstå och använda.

    * Förhindra fel och buggar: Genom att kontrollera förutsättningar (med påståenden) kan du upptäcka och förhindra fel tidigt i utvecklingsprocessen.

    * Aktivera optimering: Om en funktion vet att vissa förhållanden alltid kommer att vara sanna, kan det utföra optimeringar som inte skulle vara säkert på annat sätt.

    * Dokumentation: Clear Documentation gör det möjligt för andra utvecklare att använda funktionen korrekt.

    * Ansvar: Funktionens * uppringare * ansvarar för att alla förutsättningar är sanna innan du ringer funktionen.

    * Exempel:

    `` `c

    #include

    #include

    // Funktion för att beräkna ett nummer

    int factorial (int n) {

    // Förutsättning:n måste vara icke-negativ

    hävda (n> =0);

    if (n ==0) {

    return 1;

    } annat {

    return n * factorial (n - 1);

    }

    }

    int main () {

    int result =factorial (5); // förutsättning nöjd

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

    // Factorial (-1); // Förutsättningen kränkt! Detta kommer att orsaka ett påstående misslyckande.

    return 0;

    }

    `` `

    I det här exemplet har funktionen "Factorial" en förutsättning som "n" måste vara icke-negativ. "Hävdar (n> =0)` uttalande kontrollerar denna förutsättning. Om "n" är negativt kommer påståendet att misslyckas och programmet avslutas (i en felsökningsbyggnad).

    2. Postkondition:

    * Definition: Ett villkor som måste vara sant * Efter* har en funktion kört framgångsrikt. Den beskriver programmets tillstånd (variabler, datastrukturer, returvärde) efter att funktionen har slutfört sin uppgift. Det är * -funktionen * ansvaret för att se till att postkonditionerna uppfylls, * förutsatt * förutsättningarna uppfylldes.

    * Syfte:

    * garantera funktionens effekt: Postkonditioner dokumenterar vad funktionen * lovar * att göra.

    * Verifiera korrekthet: Genom att kontrollera postkonditioner (med påståenden) kan du verifiera att funktionen producerar de förväntade resultaten.

    * Underlätta felsökning: Om en postkondition kränks indikerar det ett fel i själva funktionen.

    * Dokumentation: Clear Documentation gör det möjligt för andra utvecklare att förstå funktionens beteende.

    * Ansvar: Själva * -funktionen * ansvarar för att alla postkonditioner är sanna innan de återvänder.

    * Exempel:

    `` `c

    #include

    #include

    // funktion för att beräkna kvadratet för ett nummer

    int kvadrat (int x) {

    int resultat =x * x;

    // Efterkondition:Resultatet måste vara icke-negativt (om X är ett heltal)

    hävda (resultat> =0); // Detta kan misslyckas på grund av överflöd av heltal om X är mycket stort.

    returresultat;

    }

    int main () {

    int resultat =kvadrat (5);

    printf ("kvadrat på 5:%d \ n", resultat);

    int Large_Number =100000; // kan orsaka överflöde

    resultat =kvadrat (large_number); // Efterkondition kan misslyckas på grund av överflöd.

    printf ("kvadrat av %d:%d \ n", large_number, resultat);

    return 0;

    }

    `` `

    I det här exemplet har funktionen "Square" en postkondition som "resultat" måste vara icke-negativ (förutsatt att "x" är ett heltal). `Hävdar (resultat> =0)` uttalande kontrollerar denna postkondition. Om resultatet är negativt (på grund av till exempel överflöd av heltal) kommer påståendet att misslyckas.

    Nyckelskillnader sammanfattade:

    | Funktion | Förutsättning | Postcondition |

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

    | timing | Kontrollerad * före * funktionen körs | Kontrollerad * efter * funktionen körs |

    | Ansvar | Uppringaren av funktionen | Funktion själv |

    | Syfte | Definiera förväntad input och miljö | Definiera garanterat beteende och effekt av funktionen |

    | Överträdelse | Anger ett problem i * samtalskoden * | Indikerar ett problem * inom funktionen * |

    | Garantier | Funktionen kan fungera korrekt | Funktionen kommer att ha uppnått sin avsedda effekt |

    Hur man implementerar i C:

    Eftersom C inte har inbyggt stöd för förutsättningar och postkonditioner är standardmetoden att använda:

    1. `hävdar ()` makro (från ``) :Detta är det vanligaste sättet att kontrollera förhållandena. Påståenden är vanligtvis aktiverade i felsökningsbyggnader (t.ex. med kompilatorflaggan `-ddebug`) och inaktiveras i frisläppningsbyggnader. Detta innebär att kontrollerna inträffar under utvecklingen men är optimerade i slutprodukten för att undvika prestanda.

    2. `#ifdef Debug` block :Du kan också använda `#ifdef Debug` för att villkorligt inkludera mer komplexa förutsättningar för förutsättning och postkondition som kan innebära mer än en enkel jämförelse.

    3. Kommentarer :Även om du inte använder påståenden är det avgörande att dokumentera förutsättningar och postkonditioner i kommentarer för att göra din kod mer förståelig.

    4. testramar: Överväg att använda testramar som stöder kontroller före/efter villkor för att underlätta enhetstestning.

    Exempel med kombinerade förutsättningar, postkonditioner och kommentarer:

    `` `c

    #include

    #include

    /**

    * @Brief beräknar kraften hos ett nummer (bas upp till exponent).

    *

    * @param bas basnumret (heltal).

    * @param exponent Exponenten (icke-negativt heltal).

    *

    * @pre exponent> =0 (exponent måste vara icke-negativ).

    * @pre bas! =0 || Exponent! =0 (bas och exponent inte båda 0 - undviker odefinierat beteende)

    *

    * @post returnerar basen upp till exponentens kraft.

    * @post Om exponenten är 0 är resultatet 1 (med undantag för bas =0, vilket tillåts).

    *

    * @returnera resultatet av basen höjt till exponentens kraft.

    * Returnerar 1 om exponenten är 0.

    */

    int Power (int bas, int exponent) {

    // Förutsättningar:

    hävda (exponent> =0);

    hävda (bas! =0 || exponent! =0); // Förhindra odefinierat beteende med 0^0

    int resultat =1;

    för (int i =0; i resultat *=bas;

    }

    // Efterkonditioner:

    if (exponent ==0) {

    hävda (resultat ==1); // Kontrollera om basfodralet

    }

    returresultat;

    }

    int main () {

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

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

    resultat =kraft (5, 0); // 5^0 =1

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

    // Power (0,0); // Detta kommer att utlösa påståendet.

    return 0;

    }

    `` `

    Fördelar med att använda förutsättningar och postkonditioner:

    * Förbättrad kodkvalitet: De tvingar dig att tänka noga över antagandena och garantierna för dina funktioner.

    * Enklare felsökning: Påståenden hjälper till att fånga fel tidigt och fastställa källan till problem.

    * Bättre dokumentation: De dokumenterar tydligt det förväntade beteendet för dina funktioner.

    * Ökad underhållbarhet: De gör din kod lättare att förstå och ändra, vilket minskar risken för att införa buggar.

    * Formell verifiering: I vissa fall kan förutsättningar och postkonditioner användas med formella verifieringsverktyg för att bevisa riktigheten i din kod.

    Genom att integrera förutsättningar och postkonditioner i din C -kod (även om du bara använder kommentarer och påståenden) kan du skriva mer robust, pålitlig och underhållbar programvara.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Program i C + + som kommer att vända en mening
    ·Så lägger heltal i stigande ordning med C + +
    ·Hur man skapar en IRC Spybot
    ·Hur att dölja subview på en iPhone
    ·C-program för att beräkna linjär och binär sökning…
    ·Hur man läser en Hex -fil med ANSI C
    ·Hur man använder Visual C + + Express
    ·Hur man skapar en vektor av strängar i C + +
    ·Hur implementerar jag Short Time Delay i C
    ·Hur man använder LINQ till XML
    Utvalda artiklarna
    ·Hur man gör en PHP chattrum
    ·Hur man använder Logiska operatorer i Java
    ·Turing Boolean Typer
    ·Konvertera COBOL till Visual Basic
    ·Skillnader mellan System.in och System.out
    ·Hur bli av Apple Script fel
    ·Hur att skapa en visuell flödesschema
    ·Hur Importera platta filer i NetBeans
    ·Vilket språk skrivs pseudocode?
    ·Hur redigera metadata för ett foto
    Copyright © Dator Kunskap https://www.dator.xyz