• mina86@lemmy.wtf
    link
    fedilink
    English
    arrow-up
    38
    ·
    15 hours ago

    This is hardly newsworthy. If the extensions were called ‘Jabberwocky C Extennsions’ no one would have cared. The extension allows for tagged unnamed structs inside of a struct, e.g.:

    struct inner { /* ... */ };
    struct outer {
        int value;
        struct inner;
    };
    
      • Obin@feddit.org
        link
        fedilink
        arrow-up
        17
        ·
        edit-2
        15 hours ago

        You mean ‘unnamed’ is what’s confusing you?

        Normally you can do anonymous struct/union members or struct struct/union members that are tagged structs but not anonymous.

        I.e. in standard C you’d have to do either:

        struct foo { int baz; };
        struct bar { struct foo foo; };
        ...
        struct bar data;
        data.foo.baz = 0;
        

        or:

        struct bar { struct {  int baz; } foo; };
        ...
        struct bar data;
        data.baz = 0;
        

        but to do the following, you’d need the extension:

        struct foo { int baz; };
        struct bar { struct foo; };
        ...
        struct bar data;
        data.baz = 0;
        
        • mina86@lemmy.wtf
          link
          fedilink
          arrow-up
          8
          ·
          15 hours ago

          Minor correction: Unnamed structs and unions (so your second example) are not part of C. They are GNU extensions.

          • MinekPo1 [it/she]@lemmygrad.ml
            link
            fedilink
            arrow-up
            3
            ·
            edit-2
            10 hours ago

            “ANSI C” by Kernighan and Ritchie disagrees , including that syntax (note : retranslation from Polish as that’s the language my copy is in) :

            A8.3

            […]

            struct-union-specifier:
            , union-struct identifier ₒₚₜ { compound-declaration-list }
            , union-struct identifier

            […]

            Specifiers of structures or unions with [a compound declaration] list, but with no label [identifier], creates a unique type; it may only be referred to in the declaration in which it is part.

      • mina86@lemmy.wtf
        link
        fedilink
        English
        arrow-up
        12
        ·
        edit-2
        14 hours ago

        Tag is what goes after the struct keyword to allow referring to the struct type. Structs don’t have to have a tag. Name is what field are called. Adapting Obin’s example:

        struct foo { int baz; };
        struct bar { struct foo qux; };
        struct bar data;
        data.qux.baz = 0;
        

        foo and bar are tags for struct foo and struct bar types respectively; baz and qux are field names; and data is a variable name.

    • vort3@lemmy.ml
      link
      fedilink
      arrow-up
      12
      arrow-down
      1
      ·
      edit-2
      11 hours ago

      Because they wanted drama and clickbaity headline.