home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!sdrc!thor!scjones
- From: scjones@thor.sdrc.com (Larry Jones)
- Newsgroups: comp.std.c
- Subject: Re: float to cond conversions
- Message-ID: <2388@sdrc.COM>
- Date: 12 Dec 92 20:11:49 GMT
- References: <1992Dec09.011729.20954@Veritas.COM>
- Sender: news@sdrc.COM
- Lines: 44
-
- In article <1992Dec09.011729.20954@Veritas.COM>, joshua@Veritas.COM (Joshua Levy) writes:
- > Consider the following code:
- > int same(int b) { return b ; }
- > if (X)
- > if (same(!!(X)))
- > if (same((int)(X))))
- > X can be any legal C code including something like "f == 4.0"
- > where f is a float or a double.
- >
- > If I have an ANSI C compiler, are either of the second two if statements
- > identical in behavior to the first if statement?
-
- Yes, the second one is.
-
- First, note that your same() function is, at best, a long-winded way to
- write an (int) cast and, at worst, a noop. Thus, the second and third
- if statements are equivalent to:
- if ((int)!!(X))
- if ((int)(int)(X))
- Since the result of the ! operator is already an int and you already had
- an explicit (int) cast in the third if statement, same() is a complete
- noop in both of the cases which then degerate to:
- if (!!(X))
- if ((int)(X))
-
- Now, let's write out the implicit comparisons with 0 explicitly:
- if ((X) != 0)
- if (!((X) == 0)) => if ((X) != 0)
- if ((int)(X) != 0)
-
- It's now obvious that the first and second statements are identical and
- the third satement is also identical *if X has an integral value*. If X
- has a non-integral value like 0.1, the first two statements will be true
- but the third will be false.
-
- > I'm also interested in knowing if either of the second two if statements
- > will have different behavior in any common K&R C compiler.
-
- No, but a K&R compiler will not automatically convert the argument to
- same() to int the way an ANSI compiler will (given a prototype).
- ----
- Larry Jones, SDRC, 2000 Eastman Dr., Milford, OH 45150-2789 513-576-2070
- larry.jones@sdrc.com or ...uunet!sdrc!larry.jones
- I sure wish I could get my hands on some REAL dynamite. -- Calvin
-