assert(false) in release == splinter in eye
Denis Koroskin
2korden at gmail.com
Mon Oct 11 12:58:00 PDT 2010
On Sun, 10 Oct 2010 19:52:28 +0400, Christopher Bergqvist
<chris at digitalpoetry.se> wrote:
> Hi,
>
> Time for some Sunday nitpicking. While reading TDPL, one thing that stuck
> out to me was the special behavior of assert(false). Consider the
> following
> program compiled with "-release".
>
> void main()
> {
> int a = 0;
> assert(a);
> }
>
> That program will run without errors. Changing the type of variable a
> from
> "int" to "enum" results in the program segfaulting thanks to the compiler
> being able to know the value of the expression "a" at compile time and
> inserting a HLT/"halt" instruction. Having the ability to change
> something
> subtle in a more complex expression or series of expressions without
> realizing you made a compile time assert(false) which crashes your
> program
> feels ugly.
>
> I would prefer it if assert() didn't have this special type of behavior,
> and
> that a "halt" keyword or equivalent was introduced. What do you think?
>
> / Chris
There is a C abort() function, and most compiler recognize that it doesn't
return.
More information about the Digitalmars-d
mailing list