Re: variable type cast

"Prof A Olowofoyeku (The African Chief)" <[email protected]>
Newsgroups gmane.comp.compilers.gpc
Organization ChiefSoft
Message-ID <[email protected]>
On 12 May 2013 at 16:12, Jay Michael wrote:

> gpc version 20070904, based on gcc-3.4.5 (mingw special)
>  
>      Given
>           type INT16  = INTEGER  attribute( size=16 ) ;
>           type WORD16 = Cardinal attribute( size=16 ) ;
>           var i16 : INT16 ;
>           var w16 : WORD16 ;
> why does
>           WORD16(I16) := W16 ;
> produce "error: invalid lvalue in assignment"?
           
int16 and word16 have different ranges, and that kind of type-casting 
will not circumvent the fact that the compiler should stop you from 
doing things like that unless you specifically instruct it to NOT do 
so.  

"i16 := Word16(w16)" should compile, as should "i16 := w16". 
Preferably, all should be avoided, because, if the value of "w16" is 
higher than the int16 range, the program may simply die with a runtime 
error (at best), or, worse, you end up with an undefined value in 
"i16", which may then lead to unpredictable behaviour in your program.  

Imagine this;
w16 := 45000;
i16 := w16;
This should compile, but the assignment will generate a run-time error. 

If you turn off range checking;
w16 := 45000;
{$R-}
i16 := w16;
{$R+}
then you will not get a runtime error, but what would the value of 
"i16" be after the assignment? Would it be what you are expecting?

Best regards, The Chief
--------
Prof. Abimbola A. Olowofoyeku (The African Chief) 
web:  http://www.greatchief.plus.com/


_______________________________________________
Gpc mailing list
[email protected]
https://www.g-n-u.de/mailman/listinfo/gpc
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.