hans@log-hb.UUCP (Hans Albertsson) (06/24/84)
[]
In K&R App A, para 8, it is stated
declaration:
decl-specifiers declarator-list(optional);
and
decl-specifiers:
type-specifier decl-specifiers(optional);
sc-specifiers decl-specifiers(optional);
In para 8.2 it is stated: If the type-specifier is missing from a
declaration, it is taken to be int.
I interpret this to mean that a declaration MUST have either a minimum
of one type-specifier, or a minimum of one sc-specifier, and, PROVIDING
this condition is being met, int may be assumed, that is,
all of
auto a;
int b;
short c;
register int d;
register e;
are acceptable, as opposed to
a = 1;
since there is NO specifier of any sort in the latter case.
Am I right or wrong? What will ANSI say in this matter?
I know that the Sargasso C for TOPS10/20 requires what I consider correct.
UNIX pcc-based compilers permit the "a = 1;" form.
--
{decvax,philabs}!mcvax!enea!log-hb!hans
Hans Albertsson,
TeleLOGIC AB
Box 1001,
S-14901 Nynashamn,
SWEDENwoods@hao.UUCP (Greg "Bucket" Woods) (07/04/84)
I don't know what the manual or the standards say, but under no
circumstances should
a = 1;
be allowed as a valid declaration. Gramatically it is indistinguishable
from an assignment statement! If it were the first statement after the
declaration section, should it be flagged as a multiple declaration
error if "a" were declared above as a pointer to something, or should
it assign a pointer of the appropriate type to location 1? If it is legal,
it stinks.
--Greg
--
{ucbvax!hplabs | allegra!nbires | decvax!stcvax | harpo!seismo | ihnp4!stcvax}
!hao!woods
"I only want to hold you, I don't want to tie you down"dgary@ecsvax.UUCP (07/11/84)
<> >From: ka@hou3c.UUCP Thu Jul 5 23:59:08 1984 >The statement "a = 1;" should be a valid global declaration. For >declarations inside a function, "int a = 1;" should be required. > Kenneth Almquist I agree that "a = 1;" should be a valid global declaration, but see nothing wrong with it as a local one. The statements "int a=1;" "int a; a = 1;" and "a = 1;" should all produce equivalent code! This is because of the way C handles initialization of automatic local variables. The only problem I can see is in letting the compiler tell where the declarations end and the statements begin. If you allow this as a valid declaration, that's not a problem. D Gary Grady Duke University Computation Center, Durham, NC 27706 (919) 684-4146 USENET: {decvax,ihnp4,akgua,etc.}!mcnc!ecsvax!dgary
jdb@mordor.UUCP (John Bruner) (07/12/84)
Allowing automatic variables to be declared with "x = 1;" instead of
"int x = 1;" can produce ambiguities. Consider
int *p = &something; int *p = &something;
func() func()
{ {
*p = 0; int *p = 0;
return(p); return(p);
} }
This should not treat "*p = 0;" as an automatic variable definition;
rather, it must be interpreted as a reference to the global "p".
Also, "int *p = 0;" does not do the same thing as "int *p; *p = 0;".
The first case sets "p" to NULL, the second case sets the integer
pointed-to by (the garbage) pointer "p" to zero.
--
John Bruner (S-1 Project, Lawrence Livermore National Laboratory)
MILNET: jdb@mordor.ARPA [jdb@s1-c] (415) 422-0758
UUCP: ...!ucbvax!dual!mordor!jdb ...!decvax!decwrl!mordor!jdb