www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Re: Signed word lengths and indexes

reply Kagamin <spam here.lot> writes:
Jérôme M. Berger Wrote:

 #include <assert.h>
 #include <stdio.h>
 
 int main (int argc, char** argv) {
    char*        data   = argv[0];  /* Just to get a valid pointer */
    unsigned int offset = 3;
 
    printf ("Original: %p\n", data);
 
    data += offset;
    printf ("+3      : %p\n", data);
 
    data += -offset;
    printf ("-3      : %p\n", data);
 
    assert (data == argv[0]);    /* Works on 32-bit systems, fails on 64-bit */
 
    return 0;
 }
 

http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=97545
Jun 16 2010
parent =?UTF-8?B?IkrDqXLDtG1lIE0uIEJlcmdlciI=?= <jeberger free.fr> writes:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Kagamin wrote:
 J=C3=A9r=C3=B4me M. Berger Wrote:
=20
 #include <assert.h>
 #include <stdio.h>

 int main (int argc, char** argv) {
    char*        data   =3D argv[0];  /* Just to get a valid pointer */=


    unsigned int offset =3D 3;

    printf ("Original: %p\n", data);

    data +=3D offset;
    printf ("+3      : %p\n", data);

    data +=3D -offset;
    printf ("-3      : %p\n", data);

    assert (data =3D=3D argv[0]);    /* Works on 32-bit systems, fails =


    return 0;
 }

http://www.digitalmars.com/webnews/newsgroups.php?art_group=3Ddigitalma=

Yes, I know. I was pointing out to Walter a real life example of code that works on 32-bit systems but not on 64-bit systems because of signedness issues. That was in answer to Walter saying: "I thought most 64 bit C compilers were specifically designed to avoid this problem." Jerome --=20 mailto:jeberger free.fr http://jeberger.free.fr Jabber: jeberger jabber.fr
Jun 17 2010