I really like the concept of inline assertions. Assertions might be rude, since they kick you out of a program whenever they fail, but by using them you can make sure that your code gives you the expected results. You might argue that Unit Testing is a better approach. I won't say no, but I believe that unit testing is slower to implement and not necessary in all cases.
Anyway this is not where I want to focus. If you are coding in QT, you might be aware of
My mistake: I wrongly assumed that
So are you using
Happy coding.
Anyway this is not where I want to focus. If you are coding in QT, you might be aware of
Q_ASSERT
. Like other features (QString
, QFile
, etc.), QT provides its own facility for writing code assertions. So that's another replacement of a standard facility, right? Well, not exactly... What I wasn't aware of, is that Q_ASSERT
statements are completely ignored when the application is executing in release mode. They are only taken into account in debug mode. I was using a statement like Q_ASSERT(doThat())
in my code, which was causing a hard to track logical error (since doThat()
was never executed in release mode). Luckily, after a couple of hours a colleague of mine discovered the bug.My mistake: I wrongly assumed that
Q_ASSERT
acts like the classic assert
, which is only ignored in a C++/C program if a special macro (like NDEBUG
) is defined. What I actually wanted was my assertions to be checked in both modes, which is done by using the standard assert
facility.So are you using
Q_ASSERT
? That's fine. Just be aware that Q_ASSERT
and assert
behave differently.Happy coding.