1 #include <stdint.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 int main (int argc, char const *argv[]) 6 { 7 struct Bits 8 { 9 uint32_t : 1, // Unnamed bitfield 10 b1 : 1, 11 b2 : 2, 12 : 2, // Unnamed bitfield 13 b3 : 3, 14 : 2, // Unnamed bitfield (this will get removed) 15 b4 __attribute__ ((aligned(16))), 16 b5 : 5, 17 b6 : 6, 18 b7 : 7, 19 four : 4; 20 }; 21 22 printf("%lu", sizeof(struct Bits)); 23 24 struct Bits bits; 25 int i; 26 for (i=0; i<(1<<1); i++) 27 bits.b1 = i; //// break $source:$line 28 for (i=0; i<(1<<2); i++) 29 bits.b2 = i; //// break $source:$line 30 for (i=0; i<(1<<3); i++) 31 bits.b3 = i; //// break $source:$line 32 for (i=0; i<(1<<4); i++) 33 bits.b4 = i; //// break $source:$line 34 for (i=0; i<(1<<5); i++) 35 bits.b5 = i; //// break $source:$line 36 for (i=0; i<(1<<6); i++) 37 bits.b6 = i; //// break $source:$line 38 for (i=0; i<(1<<7); i++) 39 bits.b7 = i; //// break $source:$line 40 for (i=0; i<(1<<4); i++) 41 bits.four = i; //// break $source:$line 42 43 struct MoreBits 44 { 45 uint32_t a : 3; 46 uint8_t : 1; 47 uint8_t b : 1; 48 uint8_t c : 1; 49 uint8_t d : 1; 50 }; 51 52 struct MoreBits more_bits; 53 54 more_bits.a = 3; 55 more_bits.b = 0; 56 more_bits.c = 1; 57 more_bits.d = 0; 58 59 struct EvenMoreBits 60 { 61 uint8_t b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, 62 b7 : 1, b8 : 1, b9 : 1, b10 : 1, b11 : 1, b12 : 1, 63 b13 : 1, b14 : 1, b15 : 1, b16 : 1, b17 : 1; 64 }; 65 66 struct EvenMoreBits even_more_bits; 67 memset(&even_more_bits, 0, sizeof(even_more_bits)); 68 even_more_bits.b1 = 1; 69 even_more_bits.b5 = 1; 70 even_more_bits.b7 = 1; 71 even_more_bits.b13 = 1; 72 73 #pragma pack(1) 74 struct PackedBits 75 { 76 char a; 77 uint32_t b : 5, 78 c : 27; 79 }; 80 #pragma pack() 81 struct PackedBits packed; 82 packed.a = 'a'; 83 packed.b = 10; 84 packed.c = 0x7112233; 85 86 struct LargePackedBits { 87 uint64_t a: 36; 88 uint64_t b: 36; 89 } __attribute__((packed)); 90 91 struct LargePackedBits large_packed = 92 (struct LargePackedBits){ 0xcbbbbaaaa, 0xdffffeeee }; 93 struct LargePackedBits *large_packed_ptr = &large_packed; 94 95 return 0; //// Set break point at this line. 96 97 } 98