これは有効ですか
void *p = &X; /* some thing */
p += 12;
もしそうなら、pは今何を指しているのですか?私はこれを行う(そしてきれいにコンパイルする)(サードパーティの)コードを持っています、そして私の推測では、void*はchar*として扱われました。私の信頼できるK&Rは、このトピックについて沈黙しています。
編集:私の小さなテストアプリはgcc 4.1.1で正常に動作し、void*をchar*として扱います。しかし、g++バーフ
私はそれを正しく行う方法を知っています。このコードベースをクリーンアップして、すべての場所を見つける必要があるかどうかを知る必要があります。
ところで、gcc-pedanticは警告をスローします
概要:
C仕様はあいまいです。表現と関数パラメータとしての使用に関しては、void * =char*と書かれています。しかし、ポインタ演算に関しては沈黙しています。
- gcc(4)はそれを許可し、charとして扱います*
- g++はそれを拒否します
- gcc-pedanticはそれについて警告します
- vs2010cとc++の両方がそれを拒否します