Messages in this thread | | | Date | Thu, 06 May 1999 02:25:30 +0000 | From | Tom Eastep <> | Subject | Re: fork() Problem? |
| |
"Richard B. Johnson" wrote: > > On Wed, 5 May 1999, Kurt Garloff wrote: > > > On Wed, May 05, 1999 at 09:52:23AM -0400, Richard B. Johnson wrote: > > > > > > if (pid = fork()) > > > ^^^^________ logical test of an assignment? This will always > > > be true! > > > if((pid = fork()) != 0) or > > > if((pid = fork())) > > > You need to make the assignment first, then > > > test for non-zero. > > > > SORRY? I can't let this uncorrected! > > > > Why do you think it's legal to use smth like a = b = c; ??? > > > > Because b = c return the value assigned to b. > > > > > > if (pid = fork()) do_smth; > > > > is identical to > > > > if ((pid = fork()) != 0) do_smth; > > > > Not so. Your first instance tested if the assignment succeeded. It > is a common error called 'boolean test of assignment' and is the > most common error I've seen in 'C' coding.
Dick, I suggest that you:
a) Drag out your damp and moldy copy of K&R b) Go to the index and lookup "Assignment expression" c) Read AND UNDERSTAND all of the references you find there
In short, an assignment expression evaluates to the final value assigned to the left side; not, as you've asserted above, "if the assignment succeeded". Hence, when appearing in an 'if' statement,
(a = <some expression>)
will evaluate to "true" if 'a' gets a non-zero value and evaluates to false if 'a' gets a value of zero....
-Tom -- Tom Eastep Compaq Computer Corporation Enterprise Computing Group Tandem Division tom.eastep@compaq.com
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |