google-code-prettify

2009-12-04

Cで、constなポインタからconstをはずす方法

constなポインタからconstをはずすキャストをすると、コンパイラのwarningが出る事がある。

const void *p;
void *p2;

p = xxx;
p2 = (void*)p; ←ココ。

明示的にキャストしているから問題ないような気もするのだが、warningは出てしまう。

一度longにキャストするという手もある。

p2 = (void*)(long)p;

しかしこれだと、「ポインタのサイズとlongのサイズは同じなのか?」問題があり、スッキリしない。

以下のようにunionを使うと、コンパイラをだまらせる事ができ、しかもスッキリと問題が解決する。

union {
void *vp;
const void *cvp;
} u;

u.cvp = p;
p2 = u.vp;

0 件のコメント: