Article View: comp.std.c
Article #2579ANSI vs K&R 3.7.1 structures Help!
From: john c kelly
Date: Fri, 22 Mar 1991 18:37
Date: Fri, 22 Mar 1991 18:37
81 lines
4166 bytes
4166 bytes
Sorry to bother everyone but I am about to port a fair size
application from one machine to another. I had not done much work
on the target machine so I decided to checkout the compiler's
capabilities. I took a copy of the C torture tests and tried to
compile the code on the new machine. I could not do the testing
myself, the system administrator had to, so I placed all of the
code into one single file and he ran the compiler, which promptly
died. The sysadmin put in a service call and sent a copy of the
code to the engineers and they replied:
This note is to explain why we do not think that the
test case code is a valid ANSI C program. Please note we
only support the K&R standard where it agrees with ANSI.
In ANSI 3.7.1, 5th paragraph of the 'Contraints'
section, it states: 'If the declarator includes an
identifier list, each declaration in the declaration list
shall have at least one declarator, and those declarators
shall declare only identifiers from the identifier list.'
The key point is that each function must have a
declarator.
In function s22(pd0) you declared a structure :
struct defs {
... some stuff
... some more stuff
}; /* <--- should be a declarator here. */
struct defs *pd0;
The problem with your code is that the 'struct defs'
statement does not have a declarator. The compiler
dosen't like the semi-colon because it is expecting an
identifier for the declarator.
The following is what the ANSI version of the above
code looks like:
struct defs {
... some stuff
... some more stuff
} *pd0; /* <--- now the declaration has a declarator. */
We converted the test case to ANSI format, and got
further compile errors becasue the compiler gives the
definition of 'struct defs' tag in function s22 file
scope, and so each subsequent declaration of 'struct
defs' receives an error message that stuct tags cannot be
redefined. The way to resolve that is to only do one
defintion of the 'struct defs' tag.
HELP! I am highly suspicious of their response. I have used
this stye of code before. In fact the code compiles fine using 5
other compilers! I don't have the ANSI spec to quote from so I
appeal to the C-NET-GODS to tell me if they are blowing smoke or I
am just stupid. One thing that really wories me is that they say
the 'stuct defs' tag has been given file scope. It was declared
INSIDE the function! I thought that this made it local not global.
ANY help or suggstions would be greatly appreciated. If
possible e-mail directly to me I'll summarize if enough interest.
John C. Kelly MaBell: 717-986-5038
Prime System Integration (prefered)--> Prime: j.kelly@md-b.prime.com
Prime Computer Inc. Client: ampt0659@s2901b.amp.com
DISCLAIMER: I speak for me. Only. Home: jkelly@world.std.com
"You can demonstrate a program for an executive - but you can't make
him computer literate."
--
John C. Kelly MaBell: 717-986-5038
Prime System Integration Prime: j.kelly@md-b.prime.com
Prime Computer Inc. Client: ampt0659@s2901b.amp.com
Technical Details
Message-ID:
<1991Mar22.183721.11779@world.std.com>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!cs.utexas.edu!uunet!world!jkellyShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!cs.utexas.edu!uunet!world!jkelly From: jkelly@world.std.com (john c kelly) Newsgroups: comp.std.c Subject: ANSI vs K&R 3.7.1 structures Help! Message-ID: <1991Mar22.183721.11779@world.std.com> Date: 22 Mar 91 18:37:21 GMT Organization: The World Lines: 81