home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / lang / c / 13295 < prev    next >
Encoding:
Text File  |  1992-09-08  |  1.7 KB  |  72 lines

  1. Path: sparky!uunet!mcsun!sun4nl!and!jos
  2. From: jos@and.nl (Jos Horsmeier)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: I disagree with lint(1)
  5. Keywords: lint, classic C
  6. Message-ID: <3381@dozo.and.nl>
  7. Date: 7 Sep 92 10:05:33 GMT
  8. References: <1992Sep7.083401.2587@sci.kun.nl>
  9. Organization: AND Software BV Rotterdam
  10. Lines: 60
  11.  
  12. In article <1992Sep7.083401.2587@sci.kun.nl> hansm@cs.kun.nl (Hans Mulder) writes:
  13. |typedef struct foo *bar;
  14. |
  15. |fun(b)
  16. |bar b;
  17. |{
  18. |    b=b;
  19. |}
  20. |
  21. |struct foo
  22. |{
  23. |    int i;
  24. |}   the_struct;
  25. |
  26. |main()
  27. |{
  28. |    fun(&the_struct);
  29. |    return 0;
  30. |}
  31. |
  32. >Lint(1) says:
  33. |
  34. |fun, arg. 1 used inconsistently    foo.c(5)  ::  foo.c(16)
  35. |I disagree.  The first argument to fun is a pointer to struct foo on both
  36. |lines.  In my book, that's the same.
  37. |What do you all think?
  38.  
  39. I think lint is right. The C compiler only does a `shallow type comparison',
  40. i.e. 
  41.  
  42. struct foo {
  43.     int i;
  44. };
  45.  
  46. struct bar {
  47.     int i;
  48. };
  49.  
  50. are two completely different structure types even though their contents
  51. are identical (to us.) The compiler stores the names of the identifiers
  52. in a couple of name spaces:
  53.  
  54. - label names
  55. - structure tag names
  56. - for every structure, a separate structure member name space
  57. - all other identifiers (inlcuding typedef'd names)
  58.  
  59. Very, very, very old C compilers didn't have a separate name space for
  60. the structure members, but I'm talking about the Pleistocene here ...
  61.  
  62. Because the C compiler (and lint) just doesn't check the _contents_
  63. (or description) of the types (it just finds the name `bar' in the 
  64. last name space and the name `foo' in the structure tag name space,) 
  65. it comes to the conclusion that you're using inconsistent pointer types.
  66.  
  67. Does this clarify things a bit?
  68.  
  69. kind regards,
  70.  
  71. Jos aka jos@and.nl
  72.