3

たとえば、関数パラメーターとして渡された配列がポインターに減衰する場合や、関数が関数ポインターに減衰する場合など、「減衰」という用語に時々出くわします。私がacコンパイラを書いていた場合、「崩壊」という用語が公式に定義されているのはどこにあり、それが発生したすべてのケースはどこに文書化されていますか?

4

4 に答える 4

3

このための標準の公式用語は「左辺値変換」です。標準の現在のバージョン(C11)では、これは6.3.2.1p3にあります。

于 2012-05-02T16:14:40.040 に答える
1

2番目のGoogle検索はこれをもたらしました:

The K&R method of reducing arrays to pointers
 ---------------------------------------------
 K&R tried to create a unified treatment of arrays and pointers, one that 
 would expose rather than hide the array equation in the compiler's code. 
 They found an elegant solution, albeit a bit complicated. The "ugly" 
 array equation is replaced in their formulation by four rules:

    1) An array of dimension N is a 1D array with
       elements that are arrays of dimension N-1.

    2) Pointer addition is defined by:

          ptr # n = ptr + n * size(type-pointed-into)

       "#" denotes here pointer addition to avoid 
       confusion with ordinary addition.
       The function "size()" returns object's sizes.

    3) The famous "decay convention": an array is 
       treated as a pointer that points to the 
       first element of the array.

       The decay convention shouldn't be applied
       more than once to the same object.

    4) Taking a subscript with value i is equivalent 
       to the operation: "pointer-add i and then 
       type-dereference the sum", i.e.

          xxx[i] = *(xxx # i)


        When rule #4 + rule #3 are applied recursively 
        (this is the case of a multi-dimensional array), 
        only the data type is dereferenced and not the 
        pointer's value, except on the last step.

ソース

于 2012-05-02T15:35:02.383 に答える
0

C標準は、このような質問に答える唯一の方法です。

公式文書を購入したい場合は、ISO / IEC 9899:2011を探す必要があります。または、1999年または1989年の古い標準を好む場合があります。

または、2011年規格の最終ドラフトはこちらから入手でき、十分に近いものにする必要があります: http ://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

于 2012-05-02T15:44:24.523 に答える
0

配列名が減衰するということは、その値が最初の要素へのポインターとして扱われる(=型と値を持つ)ことを意味します。配列名は常に減衰するとは限らないことに注意してください(たとえば、sizeof演算子のオペランドとしてではありません)。不完全な同義語は、として扱われるか、書き直されるか、または単にとして使用される場合があります。

于 2012-05-02T16:00:59.237 に答える