ポインターのサイズが変化することを考慮して、次のキャストを行うことはどのくらい安全でしょうか? (32/64 ビット) プログラムの不正な動作につながる可能性はありますか?
#define APL 1
#define GRP 2
void *fruits[][2] = {
{"Apples", (void *) APL},
{"Grapes", (void *) GRP},
};
ポインターのサイズが異なることを考慮して?
それは何の役割も果たしません。標準では、整数をポインターにキャストすることが許可されています。
しかし、キャストの結果は (0 に評価される定数式を除いて) 実装定義であり、おそらく操作や読み取りさえ許可されているメモリへのポインターではありません。
プログラムの不正な動作につながる可能性はありますか?
これらのポインターを使用すると (たとえば、他のポインター型にキャストし、結果を逆参照する)、未定義の動作につながり、さまざまな種類の悪い動作が発生する可能性があります。