ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
26 марта
1503771 Топик полностью
Eddy_Em (06.03.2025 09:12, просмотров: 192) ответил vesago на Коллеги, кто силен в языке си? Нормально ли так писать?
Кстати, в конкретном случае typedef позволил бы избавиться от union'а: 
#include <stdio.h>
#include <stdint.h>

typedef struct{
  uint8_t a : 1;
  uint8_t b : 1;
} ab_t;

typedef struct{
  ab_t flags;
  double shnyagaD;
  int64_t shnyagaI64;
} test_t;

int main(){
  test_t str;
  str.flags.a = 1;
  printf("flags: %u\n", *(uint8_t*)&str.flags);
  ab_t *f = &str.flags;
  *(uint8_t*)f = 0;
  printf("flags: %u\n", *(uint8_t*)&str.flags);
  return 0;
}

g

gcc a.c && ./a.out

flags: 1 flags: 0


И да: а зачем объявлять имя структуре в typedef, если оно внутри самой структуры не используется? Это имеет смысл лишь для всяких очередей/списков и т.п., где внутри структуры есть указатели на подобные структуры.


// хотел это добавить в свое предыдущее сообщение, но никак не получилось из блока [code] вылезти. Сколько уже раз говорил, что эти "кнопочки" - уебище гребаное! Нужны нормальные bb-codes.

eddy-em.livejournal.com github.com/eddyem