2008/8/27 Nikolay Sivov bunglehead@gmail.com:
Henri Verbeet wrote:
2008/8/27 Nikolay Sivov bunglehead@gmail.com:
Markus Hitter wrote:
if (!attr || !attr->ObjectName) return STATUS_INVALID_PARAMETER;
Shouldn't this be splitted? It isn't safe to rely on evaluation order. Or is it a default compiler setting for us?
This is well defined in C. !attr will be evaluated first, and if it evaluates to true, the rest of the condition won't be evaluated. This is also known as short-circuit evaluation.
I thought it's possible to override this: not a evaluation order of course but the completeness of evaluation for debug purpose.
All C89/C99-compliant compilers will always respect the order of evaluation of the operands of the logical AND and OR operators. I don't know what "debug purpose" you are referring to, but the code generated for "if (!attr || !attr->ObjectName)" is guaranteed by the C standard to never crash on a NULL pointer.