質問: p + 5 - 5; /* undefined behaviour */ ``` パラグラフ9について、私の理解は、ptrdiff_tは常に2つのポインタの違いを保持するのに十分な大きさであるということでした。しかし、文言: '値がptrdiff_t型のオブジェクトに適合していれば、この理解が間違っていると思われるようです。私の理解は間違っているのか、C99は何かを意味していた You can find a link to the draft standards here:
回答: 私は第8項の理解に同意します。 > ポインタのオペランドと結果の両方が同じ配列オブジェクトの要素を指す場合、または配列オブジェクトの最後の要素を指す場合、評価はオーバーフローを生成してはならない。それ以外の場合、動作は定義されていません。 > > Cは配列内にポインタオーバーフローがないと仮定しているので、配列の内部にいる間はポインタを増減できます。結果ポインタが配列を離れると、オーバーフローが発生し、動作が未定義になります。 パラグラフ9については、たとえば、32ビット・ポインタと32ビット・データ型を与えるアーキテクチャがあるかもしれないが、実際には2つの32ビット・ポインタの違いは符号+ 32ビット(33各ポインタの差が32ビットのptrdiff_tに一致するわけではありません。 2補完アーキテクチャではこれは問題ではありませんが、他のアーキテクチャでは問題になる可能性があります。