2

構造定義

struct list
{
  struct list **next, **prev;
}

core.c

//Global struct
struct list *threads = {&threads, &threads};  //Warnings here:

// warning: initialization from incompatible pointer type
// warning: excess elements in scalar initializer
// warning: (near initialization for 'threads')

mainPS:このファイルには関数がありません。そして、これはグローバルでなければなりません。

4

1 に答える 1

3

へのポインターを使用して、構造体リストthreadsへのポインター変数を初期化する必要がありますstruct list{&threads, &threads}へのポインタではありませんstruct listが、 である可能性がありstruct listます。

実際の構造体インスタンスを定義し、それへのポインターを取得するには、複合リテラルを使用してそのアドレスを取得できます。

struct list *threads = &((struct list){&threads, &threads});

(注: 複合リテラルは C99 の機能です。13 年前の標準に追いついていない一部のコンパイラは、それを拒否する場合があります。)((type){initializer})

于 2012-04-23T19:52:02.667 に答える