[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Proposal: lua_pushfoo() should return 1
- From: Hao Wu <wuhao.wise@...>
- Date: Tue, 2 Sep 2014 00:15:26 -0700
On Mon, Sep 1, 2014 at 11:22 PM, Tim Hill <drtimhill@gmail.com> wrote:
>
> On Sep 1, 2014, at 11:07 PM, Hao Wu <wuhao.wise@gmail.com> wrote:
>
>
>
>
> With the odd special exception (for example, it’s nearly impossible to write
> a decent assert() macro without it).
>
>
> curious what the use case here is? mind to explain?
>
>
> —Tim
>
>
> In non-debug builds, assert() should typically compile to nothing, so it
> introduces no run-time overhead for non-debug builds. For debug builds,
> assert(e) should do nothing if e is true, or abort with an error if e is
> false. However, assert() really needs to be an expression so it can be
> placed anywhere an expression is expected.
>
> So, how to code assert()? It cannot be an “if” statement, since this is not
> an expression. Enclosing the “if” in braces also fails, since that can cause
> problems with nested “if” statements and if..else constructs. So you end up
> with something like this…
>
> #if defined(DEBUG) || defined(_DEBUG)
> #define assert(e) ( (void) ((e) ? g_nAssertPassCount++ : (PANIC("assert
> failed: '" #e "'"), 0)) )
> #else
> #define assert(e) ( (void) 0 )
> #endif
>
> The comma operator here is necessary to discard the result of evaluating the
> asserted expression.
>
> You can do better of course if the compiler allows inline functions.
Thanks, very elaborative!
>
> —Tim
>