structures en C avec valeurs initiales

Je veux créer une structure en C avec des valeurs initiales telles que:

typedef struct { int id = 0; char *name = "none"; } employee; 

Je sais que ce qui précède n’est pas possible, existe-t-il un autre moyen de le faire?

vous ne pouvez pas le faire de cette façon

Utilisez ce qui suit à la place

 typedef struct { int id; char* name; }employee; employee emp = { .id = 0, .name = "none" }; 

Vous pouvez utiliser une macro pour définir et initialiser vos instances. cela vous facilitera la tâche chaque fois que vous souhaitez définir une nouvelle instance et l’initialiser.

 typedef struct { int id; char* name; }employee; #define INIT_EMPLOYEE(X) employee X = {.id = 0, .name ="none"} 

et dans votre code lorsque vous devez définir une nouvelle instance avec un type d’employé, vous appelez simplement cette macro comme suit:

 INIT_EMPLOYEE(emp); 

La structure est un type de données . Vous ne donnez pas de valeurs à un type de données. Vous donnez des valeurs aux instances / objects de types de données.
Donc non ce n’est pas possible en C.

Tu peux faire:

 struct employee_s { int id; char* name; } employee_default = {0, "none"}; typedef struct employee_s employee; 

Et puis, vous devez simplement vous rappeler d’effectuer l’initialisation par défaut lorsque vous déclarez une nouvelle variable d’employé:

 employee foo = employee_default; 

Alternativement, vous pouvez simplement toujours construire votre structure d’employé via une fonction d’usine.

Si vous utilisez gcc vous pouvez donner des designated initializers à la création d’objects.

 typedef struct { int id=0; char* name="none"; }employee; employee e = { .id = 0; .name = "none"; }; 

Ou, utilisez simplement comme l’initialisation d’un tableau.

employee e = {0 , "none"};

Vous pouvez implémenter une fonction d’initialisation:

 employee init_employee() { empolyee const e = {0,"none"}; return e; } 

Plus encore, pour append les réponses existantes, vous pouvez utiliser une macro qui cache un initialiseur de structure:

 #define DEFAULT_EMPLOYEE { 0, "none" } 

Puis dans votre code:

 employee john = DEFAULT_EMPLOYEE; 

Vous pouvez utiliser une combinaison de fonctions de préprocesseur C avec des variables , des littéraux composés et des initialiseurs désignés, pour un confort maximal:

 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 

Vous pouvez créer une fonction pour cela:

 typedef struct { int id; char name; } employee; void set_iv(employee *em); int main(){ employee em0; set_iv(&em0); } void set_iv(employee *em){ (*em).id = 0; (*em).name = "none"; }