4

組み込みシステムで作業しており、リンク リストを実装する必要があります。

そこで、構造体を使用してノードを構築しました

typedef struct A
{
   ... //some data
   struct A *next;
   struct A *prev;
} A;

PC(gcc)ではこれでうまくいくと思います。しかし、組み込みシステムのコンパイラは「識別子 A が宣言されていません」と文句を言います...

これに対する最善の解決策は何ですか?

4

3 に答える 3

10

構造体の前方宣言を別途追加する必要があります。

struct A;
typedef struct A
{
    ... //some data
    struct A *next;
    struct A *prev;
} A;

一部のコンパイラは、投稿した方法で定義を取得しますが、別の前方宣言を必要とする古いコンパイラを見てきました。これは、古い標準または不完全な標準実装に関連している可能性があります。実際、異なるコンパイラを使用する 5 つのプラットフォームで実行されるコードを記述する必要があるプロジェクトでは、前方宣言を構造体の typedef とは別にすることを全社的なコーディング標準要件にしました。

于 2012-04-20T03:40:59.727 に答える
1

あなたはそれを分割することができます:

typedef struct A A;

struct A {
   ... //some data
   struct A *next;
   struct A *prev;
};
于 2012-04-20T03:40:24.527 に答える
0

元のコードは正常にコンパイルされるはずです。非標準のコンパイラを使用している可能性があります。他の提案の代わりに、次のコードを試すことができます。

typedef struct a
{
   ... //some data
   struct a *next;
   struct a *prev;
} A;

このように、前方宣言は必要ありません。

于 2012-04-20T09:12:43.710 に答える