Path: utzoo!mnetor!uunet!husc6!hao!ames!necntc!necis!jimd From: jimd@necis.UUCP (Jim Damoulakis) Newsgroups: comp.sys.mac Subject: Re: Lightspeed C bug? Message-ID: <583@necis.UUCP> Date: 24 Dec 87 14:34:05 GMT References: <870081@hpcilzb.HP.COM> Reply-To: jimd@necis.UUCP (Jim Damoulakis) Organization: NEC Information Systems, Acton, MA Lines: 47 In article <870081@hpcilzb.HP.COM> cnc@hpcilzb.HP.COM (Chris Christensen) writes: >I am trying to generate random numbers from 0 to 7. > >I use > >#define ABS(x) (((x) < 0) ? -(x) : (x)) >x = ABS(Random()) % 8; > >I get random numbers from -7 to 7 > >I use > >x = Random(); >x = ABS(x); >x %= 8; > >I get the desired range. > >This is the define for Absolut that I have always used. Why doesn't this work? >Am I being bitten by a "one pass" compiler bug? > It looks like you are confusing a preprocessor operation with a function. Remember that all preprocessing occurs before compilation. Therefore your ABS(Random()) % 8 is expanded to (((Random()) < 0) ? -(Random()) : (Random())) % 8; which should produce integers between -7 and 7. You need to isolate the call to Random() before applying the ABS macro, as you have done in your second example above. This looks like normal C behavior to me. I hope this helps. Jim Damoulakis Tel. (617) 263-3833 UUCP: jimd@necis.nec.com NEC Information Systems, Inc. 289 Great Road, Acton, MA 01720 "It's like deja vu all over again" -- Yogi Berra ----------------------------------------------------------------------------- -- Jim Damoulakis Tel. (617) 263-3833 UUCP: jimd@necis.nec.com NEC Information Systems, Inc. 289 Great Road, Acton, MA 01720 "It's like deja vu all over again" -- Yogi Berra -----------------------------------------------------------------------------