組み込みシステムで作業しており、リンク リストを実装する必要があります。
そこで、構造体を使用してノードを構築しました
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
PC(gcc)ではこれでうまくいくと思います。しかし、組み込みシステムのコンパイラは「識別子 A が宣言されていません」と文句を言います...
これに対する最善の解決策は何ですか?
組み込みシステムで作業しており、リンク リストを実装する必要があります。
そこで、構造体を使用してノードを構築しました
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
PC(gcc)ではこれでうまくいくと思います。しかし、組み込みシステムのコンパイラは「識別子 A が宣言されていません」と文句を言います...
これに対する最善の解決策は何ですか?
構造体の前方宣言を別途追加する必要があります。
struct A;
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
一部のコンパイラは、投稿した方法で定義を取得しますが、別の前方宣言を必要とする古いコンパイラを見てきました。これは、古い標準または不完全な標準実装に関連している可能性があります。実際、異なるコンパイラを使用する 5 つのプラットフォームで実行されるコードを記述する必要があるプロジェクトでは、前方宣言を構造体の typedef とは別にすることを全社的なコーディング標準要件にしました。
あなたはそれを分割することができます:
typedef struct A A;
struct A {
... //some data
struct A *next;
struct A *prev;
};
元のコードは正常にコンパイルされるはずです。非標準のコンパイラを使用している可能性があります。他の提案の代わりに、次のコードを試すことができます。
typedef struct a
{
... //some data
struct a *next;
struct a *prev;
} A;
このように、前方宣言は必要ありません。