From: Royce & S. P. <be...@et...> - 2003-10-05 14:39:31
|
Hi all, I cant find anything wrong with my following code: //-------------------------- data unsigned char array[4]; void main() { if(--array[2]<5) array[2]=45; // warning produced here... if(++array[3] >23) array[3]=0; //...& here! if(array[1]-- <16) array[1]=0; // this line produces *no* warning. } //---------------------------- But I get the following warnings on compiling. I'm using the latest Oct-5 win32 binaries. sdcc -c --no-xinit-opt E:\sdcode\Trials\trial.c E:/sdcode/Trials/trial.c:5: warning: converting integral to pointer without a cast from type 'literal-char' to type 'unsigned-char data-near* ' E:/sdcode/Trials/trial.c:6: warning: converting integral to pointer without a cast from type 'literal-char' to type 'unsigned-char data-near* ' Note that the 3rd 'if' line although similar, produces no warning, which is correct. What could be the reason? Thanks, --Royce. |
From: Greg H. <gr...@hi...> - 2003-10-05 15:30:49
|
The only difference I can see in the lines is that the first two use the pre-increment/decrement operator, while the third line uses the post-decrement operator. What happens if you re-write the expression in the first two so that they also use a post-decrement/increment operator? (that is, --array[2]<5 should be equivalent to array[2]-- < 6, right? So try that instead.) This certainly wouldn't correct a bug, if any, but at least it might help to identify its existance. Greg On Sun, 5 Oct 2003, Royce & Sharal Pereira wrote: > Hi all, > > I cant find anything wrong with my following code: > //-------------------------- > data unsigned char array[4]; > > void main() > { > if(--array[2]<5) array[2]=45; // warning produced here... > if(++array[3] >23) array[3]=0; //...& here! > if(array[1]-- <16) array[1]=0; // this line produces *no* warning. > } > //---------------------------- > But I get the following warnings on compiling. I'm using the latest Oct-5 > win32 binaries. > > sdcc -c --no-xinit-opt E:\sdcode\Trials\trial.c > > E:/sdcode/Trials/trial.c:5: warning: converting integral to pointer without > a cast > from type 'literal-char' to type 'unsigned-char data-near* ' > E:/sdcode/Trials/trial.c:6: warning: converting integral to pointer without > a cast > from type 'literal-char' to type 'unsigned-char data-near* ' > > Note that the 3rd 'if' line although similar, produces no warning, which is > correct. What could be the reason? > > Thanks, > --Royce. > > > > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Bernhard H. <ber...@be...> - 2003-10-05 17:27:39
|
> data unsigned char array[4]; > > void main() > { > if(--array[2]<5) array[2]=45; // warning produced here... > if(++array[3] >23) array[3]=0; //...& here! > if(array[1]-- <16) array[1]=0; // this line produces *no* warning. > } > //---------------------------- > But I get the following warnings on compiling. I'm using the latest Oct-5 > win32 binaries. > > sdcc -c --no-xinit-opt E:\sdcode\Trials\trial.c > > E:/sdcode/Trials/trial.c:5: warning: converting integral to pointer without > a cast > from type 'literal-char' to type 'unsigned-char data-near* ' > E:/sdcode/Trials/trial.c:6: warning: converting integral to pointer without > a cast > from type 'literal-char' to type 'unsigned-char data-near* ' > > Note that the 3rd 'if' line although similar, produces no warning, which is > correct. What could be the reason? It's a bug. Feel free to file it. Bernhard |