のIAR Embedded Cコンパイラはこれに満足している、と私はそれが正しいCのコードだったと仮定:Cでは、不完全な型の配列へのポインタを使用する必要がありますか?
struct incomplete;
typedef struct incomplete (*why_not)[2];
struct incomplete {struct incomplete *known_to_work;} array[2];
why_not ok = &array;
しかし、why_not
の定義上のgccと打ち鳴らすチョーク:
incomplete.c:2:29: error: array type has incomplete element type ‘struct incomplete’
typedef struct incomplete (*why_not)[2];
^
技術的には、そこを"不完全な配列の型へのポインタ"の定義を拒否する理由はありません。結局のところ、構造定義は、そのような変数が逆参照される場合、またはポインタ演算が実行される場合にのみ必要とされます。
可能であれば、構造定義を非表示にしたいと思っています。
Cの標準はこれについて何を言いますか?
どのような状況(関数パラメータさえも)でタイプ "不完全型の配列"を使用することはできません –
@ M.M実際には、どうしてですか? –
IARにバグレポートを提出してください。これが私のコンパイラを使わない理由です。彼らは、遵守していないバグの修正を受けるためにお金を払うことを求める胃があります。これは、Cのこの部分が1980年代以来存在していたため、余計に恥ずかしいことです。 – Lundin