Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
public:coding:assert [2019/03/18 08:21]
miceroy
public:coding:assert [2019/03/18 08:23] (current)
miceroy
Line 26: Line 26:
 </​code>​ </​code>​
  
 +Näin sitä sitten käytettäisiin:​
 +
 +<​code>​
 +#define DEBUG
 +#include "​assert.hpp"​
 +
 +int main()
 +{
 + int ika = -5;
 + assert(ika >= 0);
 +
 + return 0;
 +}
 +</​code>​
 +
 +Kannattaa muuten varoa, ettei kirjoita assertia näin:
 +
 +<​code>​
 +assert(status = OK); 
 +</​code>​
 +
 +Sehän ei vertaile statuksen arvoa, vaan sijoittaa siihen OK:n. Siis mahdollinen virhetilanne häviää, mutta kun kun julkaisuversiossa assertit poistetaan, niin virhe tulee takaisin. O' mama, en haluaisi joutua tuollaista virhettä korjaamaan... Assertia ei pitäisi käyttää kuin ohjelmointivirheiden etsimiseen. Esimerkiksi tiedoston avaamisen onnistumista ei saa varmistaa assertilla, vaan sille pitää rakentaa järjestelmä,​ joka ilmoittaa käyttäjälle tilanteesta. Tiedoston puuttiminenhan ei ole virhe ohjelmassa, vaan lähinnäkin käyttäjässä. Mutta toisaalta ohjelman kehityksen alkuvaiheessa,​ kun virheiden käsittelyyn tarvittavia osia ei vielä ole ohjelmoitu - mutta ohjelmoija kuitenkin haluaisi varmistaa esimerkiksi tiedostojen avaamisen ja muistin varaamisen onnistumisen - voi vastaavaa makroa käyttää. Itse määrittelen makron tassert (temporary assert), jolla ohjelman alkuvaiheessa varmistan tällaiset tilanteet. Siinä vaiheessa kun tulee aika rakentaa virheidenkäsittelyn osat, on mahdolliset vaarapaikat helppo etsiä - siis kaikki tassert-makrot pitää korvata.