Path: utzoo!mnetor!uunet!steinmetz!ge-dab!codas!killer!jfh From: jfh@killer.UUCP (The Beach Bum) Newsgroups: comp.unix.questions Subject: Re: regcmp() Message-ID: <3421@killer.UUCP> Date: 19 Feb 88 22:49:54 GMT References: <9@vsi.UUCP> <15100006@bucc2> Reply-To: jfh@killer.UUCP (The Beach Bum) Organization: Big "D" Home for Wayward Hackers Lines: 70 In article <15100006@bucc2> brian@bucc2.UUCP writes: > >> > The problem is with what you are passing. You are passing (char *)0 instead >> > of (char *)NULL. As I recall, Microport #defines NULL to be 0L instead of >> > just 0. This is an important difference. >> >> Not if you cast it to "char *", it isn't! Passing "(char *)0" is quite >> sufficient, unless the compiler is horribly broken. > > Tsk, tsk, tsk. This statment is true if sizeof(int) == sizeof(pointer). >Not a good assumption to make, eh? I do a great deal of programming using >Microsoft C 5.0 on IBM PEE CEE's. In large model, pointers are four bytes >long. However, constant integer expessions are ints, and an int is only two >bytes long. >-- > Brian Michael Wendt UUCP: {cepu,ihnp4,uiucdcs,noao}!bradley!brian > Bradley University ARPA: cepu!bradley!brian@seas.ucla.edu Tsk, tsk, tsk, your Macrosludge compiler is not behaving correctly. A cast should return the same value (yes, I'll admit it, an rlvalue - don't whip me any more) as if the casted value had been assigned to a temporary variable of the given (type). So, to give an example, if you write func (char *arg) { /* do stuff */ } call_func (int x) { func ((char *) x); } you should (_must_ in order to conform with K&R) have the same value passed as if you had done call_tfunc (int x) { char *p; p = (char *) x; func (p); } There is an _implied_ assignment of the expression to a temporary variable which is of the same type as the cast. The same thing holds true even if the value being cast is not 0, although K&R warns that pointers created in such a way may generate addressing exceptions when used. For that matter, the same thing hold true even if the type isn't (char *). If I write double func () { double d; d = (double) 5 / 2; return (d); } I had _better_ get 2.5, _not_ 2.0, which would be the case had the `double' been ignored like MSC seems to be doing with (char *). - John. -- John F. Haugh II SNAIL: HECI Exploration Co. Inc. UUCP: ...!ihnp4!killer!jfh 11910 Greenville Ave, Suite 600 "You can't threaten us, we're Dallas, TX. 75243 the Oil Company!" (214) 231-0993 Ext 260