私はオリジナルのC99(すなわち、ISO9899:1999)テキストを持っていません。私はISO9899:2007:TC3のコピーを持っています。私は、この文書の111ページから取り上げたこのテキストは、C99標準のテキストと非常によく似ていると思います。
6.7.3.1 Formal definition of restrict
...
10. EXAMPLE 3
The function parameter declarations
void h(int n, int * restrict p, int * restrict q, int * restrict r)
{
int i;
for (i = 0; i < n; i++)
p[i] = q[i] + r[i];
}
illustrate how an unmodified object can be aliased through two restricted
pointers. In particular, if a and b are disjoint arrays, a call of the form
h(100, a, b, b) has defined behavior, because array b is not modified within
function h.
これは、エイリアスポインタが読み取り専用アクセスに使用されていれば、動作を定義したと尋ねたフォームの機能を明確に示しているようです。エイリアスポインタのいずれかを使用して書き込むと、未定義の動作が呼び出されます。
私は引用する標準がありませんが、私はそれが未定義の動作であると想像しなければなりません。他のポインタが同じメモリ位置を参照していないことを明示的にコンパイラに伝え、そのヒントに違反しています。私は 'const'nessがそれに影響を与えるとは思わない。 –
自分自身と矛盾する: 'dot_product'がドットプロダクトの通常の定義である場合、私はそれが*問題ではないと思います。つまり、 'restrict'を違反することは、ポインタに対してのみ読み込み操作を実行しても問題にはなりません。私が問題が起こることを期待すると書いているときだけです。 –
「編集」を削除する必要がありますか?それは冗長なようだ。私は2人の**人が私の質問を誤解していることにショックを受けました。 – MaxB