Я хочу создать структуру в C с начальными значениями, например:
typedef struct {
int id = 0;
char *name = "none";
} employee;
Я знаю, что это невозможно, есть ли другой способ сделать это?
Я хочу создать структуру в C с начальными значениями, например:
typedef struct {
int id = 0;
char *name = "none";
} employee;
Я знаю, что это невозможно, есть ли другой способ сделать это?
вы не можете сделать это таким образом
Используйте вместо этого
typedef struct
{
int id;
char* name;
}employee;
employee emp = {
.id = 0,
.name = "none"
};
Вы можете использовать макросы define и инициализировать свои экземпляры. это облегчит вам каждый раз, когда вы хотите определить новый экземпляр и инициализировать его.
typedef struct
{
int id;
char* name;
}employee;
#define INIT_EMPLOYEE(X) employee X = {.id = 0, .name ="none"}
и в вашем коде, когда вам нужно определить новый экземпляр с типом сотрудника, вы просто вызываете этот макрос следующим образом:
INIT_EMPLOYEE(emp);
Структура - это тип данных. Вы не даете значения типу данных. Вы даете значения экземплярам/объектам типов данных.
Так что это невозможно в C.
Вы можете сделать:
struct employee_s {
int id;
char* name;
} employee_default = {0, "none"};
typedef struct employee_s employee;
И тогда вам просто нужно запомнить инициализацию по умолчанию, когда вы объявляете новую переменную сотрудника:
employee foo = employee_default;
Кроме того, вы всегда можете создать структуру своего сотрудника с помощью функции factory.
Если вы используете gcc
, вы можете дать designated initializers
при создании объекта.
typedef struct
{
int id=0;
char* name="none";
}employee;
employee e =
{
.id = 0;
.name = "none";
};
Или просто используйте как инициализацию массива.
employee e = {0 , "none"};
Вы можете реализовать функцию инициализации:
employee init_employee() {
empolyee const e = {0,"none"};
return e;
}
Тем более, чтобы добавить существующие ответы, вы можете использовать макрос, который скрывает инициализатор структуры:
#define DEFAULT_EMPLOYEE { 0, "none" }
Затем в вашем коде:
employee john = DEFAULT_EMPLOYEE;
Вы можете использовать комбинацию функции препроцессора C с varargs, сложные литералы и назначенные инициализаторы для максимального удобства:
typedef struct {
int id;
char* name;
} employee;
#define EMPLOYEE(...) ((employee) { .id = 0, .name = "none", ##__VA_ARGS__ })
employee john = EMPLOYEE(.name="John"); // no id initialization
employee jane = EMPLOYEE(.id=5); // no name initialization