64bit環境

当たり前だが、ポインタのサイズは64bit。そういえば前に調べた型サイズには入れてなかったな…。
で、32bitでは動くが、64bitでは動かないソースに苦しめられた。カッとなって検証コードを作成してみた。

#include <stdio.h>

short func(unsigned short *b,int *c){

    *b++;
    *c = (int)b;

    return 0;
}

int main(void){
    unsigned short a[0x8000];
    unsigned short *b;
    int c;

    a[0] = 0; a[1] = 1;

    b = &a[0];

    printf("%d\n",*b);

    func(b,&c);

    printf("%lx\n",b);
    printf("%lx\n",c);

    b = (unsigned short*)c;

    printf("%lx\n",b);

    printf("%d\n",*b);

    printf("POINTER SIZE = %d\n",sizeof(char*));

    return 0;
}

もちろんgcc

main.c: In function 'func':
main.c:6: warning: cast from pointer to integer of different size
main.c: In function 'main':
main.c:27: warning: cast to pointer from integer of different size

と言ってくるが…。
odawaraは他の警告も膨大だったので無視していたらこんなことに…。