Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!bloom-beacon!mcgill-vision!iros1!vedge!lai From: lai@vedge.UUCP (David Lai) Newsgroups: comp.std.c Subject: is f().c legal? How about (&(f()))->c ? Keywords: ansi Message-ID: <2648@vedge.UUCP> Date: 27 Jan 89 21:12:15 GMT Organization: Visual Edge Software, St. Laurent, Quebec Lines: 23 Here f() returns a structure. I am trying to figure out why C compilers like the latter expression and cant handle the first expression. From what I gather from the ANSI specs, it says that a function call is not an lvalue (*). Therefore the latter expression should be illegal (& requires an lvalue). As far as I can tell the first expression is legal... the . operator anly requires that the left hand side be a struct or union, it does not have to be an lvalue. So why is it that the C compilers (Sun and HP-UX's) both complain that the expression f().c is illegal, but run fine on (&(f()))->c. Seems to me that the logic is reversed here. (*) I got that info from Harbinson and Steele. I have the May Draft of ANSI, but cant find the page where it mentions that. Can anyone point me to the appropriate ANSI section number? -- "What is a DJ if he can't scratch?" - Uncle Jamms Army The views expressed are those of the author, and not of Visual Edge, nor Usenet. David Lai (vedge!lai@larry.mcrcim.mcgill.edu || ...watmath!onfcanim!vedge!lai)