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は他の警告も膨大だったので無視していたらこんなことに…。