K&R の The C Programming Language を読んでいて、構造に関するセクションで次のコード スニペットに出会いました。
struct maxpt = { 320, 200 };
と
/* addpoints: add two points */
struct addpoint(struct point p1, struct point p2)
{
p1.x += p2.x;
p1.y += p2.y;
return p1;
}
最初のケースでは、値 320 と 200 を変数 maxpt のメンバーに割り当てているように見えます。しかし、構造体型の名前が欠落していることに気付きました (「struct struct_name maxpt = {320, 200}」ではないでしょうか? 2 番目のケースでは、関数の戻り値の型は「struct name_of_struct」ではなく、単に「struct」です。
構造体名が含まれていない理由がわかりません-どのような特定のタイプの構造体を扱っているかをどのように知るのですか? 私の混乱は、以前のスニペットに構造名が含まれているという事実によって悪化しています。たとえば、次の関数の戻り値の型では、単に「構造体」ではなく「構造体ポイント」です。名前が含まれる場合と含まれない場合があるのはなぜですか?
/* makepoint: make a point from x and y components */
struct point makepoint(int x, int y)
{
struct point temp;
temp.x = x;
temp.y = y;
return temp;
}