c структура со значением по умолчанию? - PullRequest
1 голос
/ 07 апреля 2011

Здесь у меня есть следующее struct

typedef struct d {
    unsigned int size:  20;
} D;

вопрос в том, как переменная по умолчанию size будет 10.Спасибо!

Ответы [ 5 ]

2 голосов
/ 07 апреля 2011

В C типы не могут указывать значения по умолчанию для переменных. Либо вам нужно использовать C ++ с конструктором, либо систематически инициализировать вашу переменную при ее создании.

1 голос
/ 07 апреля 2011
Предложение

pratik сработает (при условии, что его использование typedef является опечаткой), но оно оставляет глобальный объект, плавающий вокруг. Альтернативная техника:

struct d {
    unsigned int size;
};
/* use only *one* of these next lines */
#define D (struct d){20}    // C99
#define D {20}              // C89
…
struct d foo = D;           // in either case

Преимущество версии C99 в том, что она может улавливать некоторые злоупотребления «конструктором», например, ,

struct d {
    unsigned int size;
};
#define D99 (struct d){.size = 20}
#define D89 {20}
…
float a[17] = D89;  // compiles, but is that really what you meant? 
float b[17] = D99;  // will not compile

Кроме того, вы можете использовать технику «составного литерала» для создания более сложных конструкторов, возможно, с аргументами.

1 голос
/ 07 апреля 2011

См. здесь для получения информации о том, что означает : 20 в unsigned int size: 20.

Вот статья в Википедии о битовых полях .

1 голос
/ 07 апреля 2011

В C нет такой вещи, как значения по умолчанию или конструкторы. Вам нужно написать функцию, которая инициализирует struct с некоторыми значениями по умолчанию. В качестве альтернативы вы можете переключиться на C ++ и создать конструктор, который бы инициализировал члены struct с некоторыми значениями по умолчанию.

0 голосов
/ 07 апреля 2011

Для установки значения элемента структуры по умолчанию вы должны использовать нечто похожее на концепцию конструктора в языках ООП.

typedef struct d {
    unsigned int size;
} D{20};

Таким образом, вы можете указывать значения по умолчанию для элементов структуры каждый раз, когда вы создаете объектэтой структуры ...

Надеюсь, что это помогает .. :)

...