pcc compiler error
Rob Warnock
rpw3 at redwood.UUCP
Tue Feb 12 11:03:26 AEST 1985
+---------------
| The following code tests the contents of a pointer to a struct and
| makes pcc generate a "compiler error" message. Is it just bad programming
| style or a compiler bug? -- Bjorn Eriksen ENEA DATA Sweden
|
| struct xy { int x; int y; } a;
| main() {
| struct xy *p;
| p = &a;
| if (*p) {
| /* compiler error: zzzcode- bad type */
| }
| }
+---------------
It's neither a compiler bug nor "bad style", but purely a syntax error. Your
code does NOT test "the contents of a pointer to a struct" as you claim; it
tests the struct ITSELF! In C, the contents of "p" is denoted by just "p";
"*p" is the object pointer to by "p". You can get identically the same error
from PCC by writing:
struct xy { int x; int y; } a;
...
if (a) ... /* same as "if (*p) ..."
This is equivalent to "if (a != 0) ..." which is a double type error:
first, C has no rule for coercing "0" to a struct; second, C doesn't have
structure comparison. (At least your compiler says "Bad type"; the one I
use says "Compiler loop, please simplify expression". ;-} )
If you want to test "p" for being a non-nil pointer, use:
if (p) ... /* same as "if(p != 0)", or "if ( p != (xy *)0 )" */
If you want at least one of the components of the struct to be "true"
(non-zero) use:
if (p->x || p->y) ... /* same as "if( (*p).x || (*p).y )" */
Hope this clarifies things for you.
Rob Warnock
Systems Architecture Consultant
UUCP: {ihnp4,ucbvax!dual}!fortune!redwood!rpw3
DDD: (415)572-2607
USPS: 510 Trinidad Lane, Foster City, CA 94404
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list