10.09.2013 Views

Dictaat SOPX3 - Harry Broeders

Dictaat SOPX3 - Harry Broeders

Dictaat SOPX3 - Harry Broeders

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Het programma stopt nog steeds abrupt. De foutmelding is nu wel veel duidelijker. Als het programma<br />

echter gecompileerd wordt zonder zogenaamde debug informatie dan worden alle assert functies<br />

verwijderd en verschijnt weer de onduidelijke foutmelding (uitzondering 10H).<br />

De standaard functie assert is bedoeld om tijdens het ontwikkelen van programma’s te controleren of<br />

iedereen zich aan bepaalde afspraken houdt. Als bijvoorbeeld is afgesproken dat de functie<br />

impedanceC alleen mag worden aangeroepen met parameters die niet gelijk aan 0 zijn dan is dat prima<br />

met assert te controleren. Elk programmadeel waarin impedanceC wordt aangeroepen moet nu<br />

voor de aanroep zelf controleren of de parameters geldige waarden hebben. Bij het testen van het programma<br />

(gecompileerd met debug informatie) zorgt de assert ervoor dat het snel duidelijk wordt als<br />

de afspraak geschonden wordt. Als na het testen duidelijk is dat iedereen zich aan de afspraak houdt dan<br />

is het niet meer nodig om de assert uit te voeren. Het programma wordt gecompileerd zonder debug<br />

informatie en alle assert aanroepen worden verwijderd.<br />

Het gebruik van assert heeft de volgende nadelen:<br />

• Het programma wordt nog steeds abrupt afgebroken en krijgt niet de kans om tijdelijk opgeslagen<br />

data op te slaan.<br />

• Op elke plek waar deze functie aangeroepen wordt moeten, voor aanroep, eerst de parameters<br />

gecontroleerd worden. Als de functie op veel plaatsen aangeroepen wordt dan is het logischer om<br />

de controle in de functie zelf uit te voeren. Dit maakt het programma ook beter onderhoudbaar (als<br />

de controle aangepast moet worden dan hoeft de code maar op 1 plaats gewijzigd te worden) en<br />

betrouwbaarder (je kunt de functie niet meer zonder controle aanroepen, de controle zit nu immers<br />

in de functie zelf).<br />

We kunnen concluderen dat assert in dit geval niet geschikt is.<br />

5.2.2 Het gebruik van een bool returnwaarde.<br />

In C (en ook in C++) werd dit traditioneel opgelost door de functie een returnwaarde te geven die<br />

aangeeft of het uitvoeren van de functie gelukt is:<br />

bool impedanceC(complex& res, double c, double f) {<br />

if (c!=0.0 && f!=0.0) {<br />

res=complex(0, -1/(2*M_PI*f*c));<br />

return true;<br />

}<br />

else<br />

return false;<br />

}<br />

Deze functie kan nu als volgt aangeroepen worden:<br />

complex z;<br />

if (impedanceC(z, 1e-6, 1e3)) {<br />

cout

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!