home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / c / 16119 < prev    next >
Encoding:
Text File  |  1992-11-08  |  2.0 KB  |  46 lines

  1. Path: sparky!uunet!sdrc!thor!scjones
  2. From: scjones@thor.sdrc.com (Larry Jones)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Returned struct
  5. Message-ID: <2226@sdrc.COM>
  6. Date: 6 Nov 92 15:44:13 GMT
  7. References: <1992Nov5.075611.14809@piccolo.cit.cornell.edu> <Bx9pJE.Et4@portal.hq.videocart.com>
  8. Sender: news@sdrc.COM
  9. Lines: 35
  10.  
  11. In article <Bx9pJE.Et4@portal.hq.videocart.com>, dfuller@portal.hq.videocart.com (Dave Fuller) writes:
  12. > sl14@crux3.cit.cornell.edu (Stephen Lee) writes:
  13. > : How can one make use of a struct returned by a function?  e.g.
  14. >   If indded you want to use a return value, it should exist as a pointer
  15. > to the structure (which is either static or malloc'd, both are messy)
  16. > secondly, passing structures around is not the right way to deal
  17. > with them, you need to pass them as pointers. Although some compilers
  18. > allow passing of structures, lets assume it will end up on one that 
  19. > doesn't do this.
  20.  
  21. Structure assignment, structure arguments, and structure return values
  22. were added to C in 1978, very shortly after K&R was published.  K&R
  23. even mentions that it is expected that those operations would be added
  24. in the future.  Any compiler you run across today that doesn't support
  25. them is apt to be either so new and incomplete and it isn't likely to
  26. be usable, or so old and venerable that it should be allowed to rest
  27. in peace.  In the example Stephen gave (complex arithmetic), using
  28. struct arguments and return values is exactly the right thing to do
  29. since it allows you to write expressions like:
  30.  
  31.     d = cmp_sqrt(cmp_add(cmp_mult(a, a), cmp_mult(b, b)));
  32.  
  33. Granted, that's not as clear as you could do with C++:
  34.  
  35.     d = sqrt(a * a + b * b);
  36.  
  37. But it's a lot clearer than the mess you'd end up with if you only
  38. used pointers and had to use explicit temporaries with lots of copying
  39. between them.
  40. ----
  41. Larry Jones, SDRC, 2000 Eastman Dr., Milford, OH  45150-2789  513-576-2070
  42. larry.jones@sdrc.com  or  ...uunet!sdrc!larry.jones
  43. Years from now when I'm successful and happy, ...and he's in
  44. prison... I hope I'm not too mature to gloat. -- Calvin
  45.