eap@bucsb.bu.edu.UUCP (Eric Pearce) (07/06/87)
	Anybody else have this problem with Nathan Glasser's "Centipede" ?
% make
        cc -O -c cent.c
        cc -O -c stuff.c
        cc -O -c input.c
        cc -O -c interrupts.c
        cc -O -c score.c
        cc -O -c move.c
        cc -O -c rand.c
        cc -O -c save.c
"save.c", line 133: Cannot take the address of this object            
*** Error code 1
Stop.
Line 133 is:      read(fd,&ch,1);
(the only changes I made were to paths in 'sys_dep.c', as per instructions)
(doing this on Encore Multimax runnning 4.2 BSD                           )
-- 
*******************************************************************************
* UUCP   : ..!harvard!bu-cs!bucsb!eap |-+-+ +-+-+-+-+-+-+-+\ /-+-+-+-+-+-+-+-+*
* ARPANET: eap@bucsb.bu.edu           |    > :   :   :    - @ -  |       g    *
* CSNET  : eap%bucsb@bu-cs            |-+-+-+-+-+-+-+-+-+-+/ \ +-+-+ +-+-+ +-+*
* BITNET : cscc8vc@bostonu            | |  Blasted by ZAXXON   |  ;  |        *
*******************************************************************************dpz@soliloquy.rutgers.edu (David P. Zimmerman) (07/06/87)
> From: eap@bucsb.bu.edu.UUCP (Eric Pearce) > Anybody else have this problem with Nathan Glasser's "Centipede" ? > "save.c", line 133: Cannot take the address of this object 109c109 < register char ch; --- > register char *ch; 133c133 < read(fd,&ch,1); --- > read(fd,ch,1); 135c135 < ch != MAGICNUM) --- > *ch != MAGICNUM) dpz -- David P. Zimmerman rutgers!dpz dpz@rutgers.edu
brisco@caip.rutgers.edu (Thomas Paul Brisco) (07/06/87)
]	Anybody else have this problem with Nathan Glasser's "Centipede" ?
]
]"save.c", line 133: Cannot take the address of this object            
]*** Error code 1
]
]Stop.
]
]Line 133 is:      read(fd,&ch,1);
]
](the only changes I made were to paths in 'sys_dep.c', as per instructions)
](doing this on Encore Multimax runnning 4.2 BSD                           )
]
	The problem is that "ch" is defined as a "register char" --
remove the "register" part and it will compile. My compiler
complained, but did not barf, on this.  It is really not a wise idea
to take the address of a register (they typically live at address 1 or
thereabouts). I got two of these messages overall, so you may run into
another. 
				Tp.
-- 
                  ----------------------------------------------------------
                  -                  ARPA: Brisco@rutgers                  -
                  -  UUCP: (ihnp4!ut-sally, allegra!packard) !caip!brisco  -
                  ----------------------------------------------------------dpz@soliloquy.rutgers.edu (David P. Zimmerman) (07/06/87)
> From: dpz@soliloquy.rutgers.edu (David P. Zimmerman) > 109c109 > > register char *ch; > 135c135 > > *ch != MAGICNUM) Sorry about that premature message - change that first *ch to ch[1]. You may also want to change the second *ch to ch[1], but it works ok here (Sun 3.2). dpz -- David P. Zimmerman rutgers!dpz dpz@rutgers.edu
gwyn@brl-smoke.ARPA (Doug Gwyn ) (07/07/87)
In article <758@soliloquy.rutgers.edu> dpz@soliloquy.rutgers.edu (David P. Zimmerman) writes:
-109c109
-<     register char ch;
----
->     register char *ch;
-133c133
-<     read(fd,&ch,1);
----
->     read(fd,ch,1);
-135c135
-<       ch != MAGICNUM)
----
->       *ch != MAGICNUM)
NO!  What is `ch' pointing to?dpz@soliloquy.rutgers.edu (David P. Zimmerman) (07/07/87)
> From: dpz@soliloquy.rutgers.edu (David P. Zimmerman) > You may also want to change the second *ch to ch[1], but it works ok > here (Sun 3.2). Yeeps. Foot in mouth time. Make that "You may ... ch[0], ..." dpz -- David P. Zimmerman rutgers!dpz dpz@rutgers.edu
dgy@cald80.UUCP (dgy) (07/07/87)
In article <1031@bucsb.bu.edu.UUCP> eap@bucsb.UUCP (EAP) writes: > Anybody else have this problem with Nathan Glasser's "Centipede" ? ... > cc -O -c save.c >"save.c", line 133: Cannot take the address of this object >*** Error code 1 > >Stop. > >Line 133 is: read(fd,&ch,1); If you look at the top of the routine you'll see that the variable 'ch' is a 'register char.' Get rid of the word 'register' and it should work fine. Dave Yearke Sigma Systems Technology, Inc. seismo!kitty!sunybcs!cald80!sigmast!dgy decvax!sunybcs!cald80!sigmast!dgy
guy@gorodish.UUCP (07/07/87)
> Sorry about that premature message - change that first *ch to ch[1]. > You may also want to change the second *ch to ch[1]... No, you won't. If "ch" is a one-element array, "ch[1]" is an expression whose meaning is not defined. You may want to change the second "*ch" to "ch[0]", but that would only be for aesthetic reasons; "*ch" and "ch[0]" mean exactly the same thing in this case. Guy Harris {ihnp4, decvax, seismo, decwrl, ...}!sun!guy guy@sun.com
tsmith@milano.UUCP (07/08/87)
In article <1031@bucsb.bu.edu.UUCP>, eap@bucsb.bu.edu.UUCP (Eric Pearce) writes: > > Anybody else have this problem with Nathan Glasser's "Centipede" ? > > > % make > cc -O -c cent.c > cc -O -c stuff.c > cc -O -c input.c > cc -O -c interrupts.c > cc -O -c score.c > cc -O -c move.c > cc -O -c rand.c > cc -O -c save.c > "save.c", line 133: Cannot take the address of this object > *** Error code 1 > > Stop. > > Line 133 is: read(fd,&ch,1); > I changed the declaration: register char ch; to char ch; and the error message went away. -- Thomas J. Smith @ MCC Software Technology tsmith@mcc.com sally!im4u!milano!tsmith
herman@ti-csl.CSNET (Herman Schuurman) (07/09/87)
in article <4287@caip.rutgers.edu>, brisco@caip.rutgers.edu (Thomas Paul Brisco) says: > > . . . . . It is really not a wise idea > to take the address of a register (they typically live at address 1 or > thereabouts). . . . . . . > According to K&R page 89: "It is also illegal to take the address of a register variable."
nathan@eddie.MIT.EDU (Nathan Glasser) (07/12/87)
In article <25245@ti-csl.CSNET> herman@ti-csl.CSNET (Herman Schuurman) writes: >in article <4287@caip.rutgers.edu>, brisco@caip.rutgers.edu (Thomas Paul Brisco) says: >> . . . . . It is really not a wise idea >> to take the address of a register (they typically live at address 1 or >> thereabouts). . . . . . . >According to K&R page 89: > "It is also illegal to take the address of a register variable." About this register variable stuff: At some point I probably made ch a register variable (why not), not realizing that I was already using the expression &ch somewhere. Since I was doing this on 4.xBsd Unix on a Vax, the compiler didn't complain. I probably still wouldn't know about it. if people hadn't started trying it on other systems. -- Nathan Glasser nathan@mit-eddie.uucp (usenet) fnord nathan@xx.lcs.mit.edu (arpa) "A tribble is the only love that money can buy."
amos@nsta.UUCP (Amos Shapir) (07/13/87)
In article <6284@eddie.MIT.EDU> nathan@eddie.MIT.EDU writes: >Since I was doing this on 4.xBsd Unix on >a Vax, the compiler didn't complain. I probably still wouldn't know >about it, if people hadn't started trying it on other systems. Or if you had run 'lint' on it, as decency requires you should have done before posting it! -- Amos Shapir National Semiconductor (Israel) 6 Maskit st. P.O.B. 3007, Herzlia 46104, Israel Tel. (972)52-522261 amos%nsta@nsc.com @{hplabs,pyramid,sun,decwrl} 34 48 E / 32 10 N
davidp@csadfa.oz (David Purdue) (07/15/87)
in article <758@soliloquy.rutgers.edu>, dpz@soliloquy.rutgers.edu (David P. Zimmerman) says:
] 
]> From: eap@bucsb.bu.edu.UUCP (Eric Pearce)
] 
]> 	Anybody else have this problem with Nathan Glasser's "Centipede" ?
] 
]> "save.c", line 133: Cannot take the address of this object            
] 
] 109c109
] <     register char ch;
] ---
]>     register char *ch;
] 133c133
] <     read(fd,&ch,1);
] ---
]>     read(fd,ch,1);
] 135c135
] <       ch != MAGICNUM)
] ---
]>       *ch != MAGICNUM)
THIS PATCH IS NOT GOOD PROGRAMMING!  It is not even guaranteed to work
(and in most cases I suspect it won't).  You see, by changing ch to *ch,
you are only allocating storage for a POINTER to the char, not for the
char (note the absence of a malloc()).  The better fix is to drop
the 'register' from 'register char ch' and put up with the (slight)
(noticable??) degredation in performance.
						DavidP
----
Mr. David Purdue	   Phone ISD: +61 62 68 8165
Dept. Computer Science	       Telex: ADFADM AA62030
University College	ACSNET/CSNET: davidp@csadfa.oz
Aust. Defence Force Academy	UUCP: ...!seismo!munnari!csadfa.oz!davidp 
Canberra. ACT. 2600.		ARPA: davidp%csadfa.oz@SEISMO.CSS.GOV
AUSTRALIA		       JANET: davidp@oz.csadfa
"Perversity Rules, C.Q.!"oleg@quad1.quad.com (Oleg Kiselev) (07/24/87)
Change of >] < register char ch; to >]> register char *ch; >THIS PATCH IS NOT GOOD PROGRAMMING! [... AND THE GOOD REASONS WHY ] >char (note the absence of a malloc()). The better fix is to drop >the 'register' from 'register char ch' and put up with the (slight) >(noticable??) degredation in performance. How about: char xxx; register char *ch = &xxx; then you can keep register access speed improvements (if any). -- Oleg Kiselev -- oleg@quad1.quad.com -- {...!psivax|seismo!gould}!quad1!oleg DISCLAIMER: All grammatical and spelling errors are inserted deliberately to test the software I am developing. In fact, that is the only reason I am posting. Yeah, that's the ticket! All my postings are just test data! Yeah!!