このプログラムの奇妙な動作を理解できません。file1.c と file2.c の 2 つのファイルがあります。
file.c は
#include <stdio.h>struct ll {
int key;
struct ll *next;
};
extern void func(struct ll*);
int main(void)
{
struct ll l = { 1, &l };
printf("%d %d\n",l.key,l.next->key);
func(&l);
return 0;
}
そして file2.c は次のとおりです。
#include <stdio.h>
struct ll
{
struct ll *next;
int key;
};
void func(struct ll *l)
{
printf("%d \n",l->key);
printf("%d \n",l->next->key);
}
コンパイルして実行すると、セグメンテーション違反が表示されます。しかし、構造体llを次のように置き換えると、file2.cのようになります。
struct ll
{
int key;
struct ll *next;
};
その後、正常に動作します。つまり、宣言の順序を入れ替えるだけで、出力に影響を与えています。