連結リストでキュー #2
queue_init()を実装する時に思わず書いてしまった間違い。
...snip struct node { struct node *next; } *p; ...snip p->next = p = malloc(sizeof(struct node)); ...snip
はコンパイラの警告レベルにもよるが警告される。
p = malloc(sizeof(struct node)); p->next = p;
のように途中で副作用を完了させないといけない。
p = p->next = malloc(sizeof(struct node));
は大丈夫だが当然意味が変ってくる。
どちらもpには新たに割り付けられる構造体のアドレスが代入されるが、二つの差は、
新たにpが指し示す構造体のnextメンバとpが同じになるか、
元からpが指し示していた構造体のnextメンバとpが同じになるか、である。
ワンライナ病とまではいかないが繋いで書く癖はよくないんだと思う。