you are viewing a single comment's thread
view the rest of the comments
[–] 187 points 1 year ago (5 children)
typedef struct {
    bool a: 1;
    bool b: 1;
    bool c: 1;
    bool d: 1;
    bool e: 1;
    bool f: 1;
    bool g: 1;
    bool h: 1;
} __attribute__((__packed__)) not_if_you_have_enough_booleans_t;
  • source
  • hideshow 5 child comments
  • [–] 16 points 1 year ago (1 child)

    This was gonna be my response to OP so I'll offer an alternative approach instead:

    typedef enum flags_e : unsigned char {
      F_1 = (1 << 0),
      F_2 = (1 << 1),
      F_3 = (1 << 2),
      F_4 = (1 << 3),
      F_5 = (1 << 4),
      F_6 = (1 << 5),
      F_7 = (1 << 6),
      F_8 = (1 << 7),
    } Flags;
    
    int main(void) {
      Flags f = F_1 | F_3 | F_5;
      if (f & F_1 && f & F_3) {
        // do F_1 and F_3 stuff
      }
    }
    
  • source
  • parent
  • hideshow 1 child comment
  • Why not if (f & (F_1 | F_3)) {? I use this all the time in embedded code.

    edit: never mind; you’re checking for both flags. I’d probably use (f & (F_1 | F_3)) == (F_1 | F_3) but that’s not much different than what you wrote.

  • source
  • parent