|
6.3.2 Evaluation of logical expressions
All arguments of a logical expression are first evaluated and
then the value of the logical expression is determined. For example, the
logical expressions (a || b) is evaluated by first evaluating
a and b , even though the value of b has no
influence on the value of (a || b) , if a evaluates to
true.
Note, that this evaluation is different from the left-to-right,
conditional evaluation of logical expressions (as found in most
programming languages). For example, in these other languages, the value
of (1 || b) is determined without ever evaluating b . This
causes some problems with boolean tests on variables, which might not be
defined at evaluation time. For example, the following results in an
error, if the variable i is undefined:
| if (defined(i) && i > 0) {} // WRONG!!!
|
This must be written instead as:
| if (defined(i))
{
if (i > 0) {}
}
|
However, there are several short work-arounds for this problem:
-
If a variable (say,
i ) is only to be used as a boolean flag, then
define (value is TRUE) and undefine (value is FALSE) i instead of
assigning a value. Using this scheme, it is sufficient to simply write
in order to check whether i is TRUE. Use the command kill
to undefine a variable, i.e. to assign it a FALSE value (see kill).
-
If a variable can have more than two values, then
define it, if necessary, before it is used for the first time.
For example, if the following is used within a procedure
| if (! defined(DEBUG)) { int DEBUG = 1;}
...
if (DEBUG == 3) {...}
if (DEBUG == 2) {...}
...
|
then a user of this procedure does not need to care about the existence
of the DEBUG variable -- this remains hidden from the
user. However, if DEBUG exists globally, then its local default
value is overwritten by its global one.
|