The C and C++ standards REQUIRE the logical operators to short-circuit,
meaning that the left hand side of the || must be evaluated first, and
then the right hand side is evaluated if and only if the left hand side
evaluated as false.
Your test should always print true, and never crash. If it does, then
the compiler is indeed, very broken.
Thomas Weidenmueller wrote:
i tried the following test application with various
configurations of
gcc 4.0 and 3.4.2, but it appears to work correctly.
#include <stdio.h>
int main(int argc, char* argv[])
{
volatile int *x = NULL;
if(x == NULL || *x == 0)
{
printf("true\n");
}
else
{
printf("false\n");
}
return 0;
}
_______________________________________________