以下のような構造体を使った C 言語のコードを書いてみたのですが
struct の方は希望通りにコンパイルと動作確認ができたのですが
typedef struct の方は
test2.c:19:2: エラー: 不明な型名 't' です
と言う具合のエラーが出てコンパイルできません。
何か回避方法はありますでしょうか?
環境は以下の通りです。
Windows7 64bit
MinGW 付属の gcc (gcc バージョン 5.3.0 (GCC))
コード: 全て選択
#include <stdio.h>
// #define TS_TEST
struct s{
struct s *left;
struct s *right;
int val;
};
#ifdef TS_TEST
typedef struct{
t *next; // test2.c:19:2: エラー: 不明な型名 't' です
t *prev;
int val;
}t;
#endif
int main()
{
struct s ss[10];
for(int i=0;i<9;i++) ss[i].right = &ss[i+1];
ss[9].right = &ss[0];
for(int i=1;i<10;i++) ss[i].left = &ss[i-1];
ss[0].left = &ss[9];
for(int i=0;i<10;i++) ss[i].val = i*10;
for(int i=0;i<10;i++)
{
printf("i %d val %d left.val %d right.val %d \n", i, ss[i].val, ss[i].left->val, ss[i].right->val);
}
printf("\n");
#ifdef TS_TEST
t tt[10];
for(int i=0;i<9;i++) tt[i].next = &tt[i+1];
tt[9].next = &tt[0];
for(int i=1;i<10;i++) tt[i].prev = &tt[i-1];
tt[0].prev = &tt[9];
for(int i=0;i<10;i++) tt[i].val = i*100;
for(int i=0;i<10;i++)
{
printf("i %d val %d prev.val %d next.val %d \n", i, tt[i].val, tt[i].prev->val, tt[i].next->val);
}
#endif
}