Je veux créer une structure en C avec des valeurs initiales comme:
typedef struct {
int id = 0;
char *name = "none";
} employee;
Je sais que ce qui précède n'est pas possible, existe-t-il une autre façon de procéder?
vous ne pouvez pas le faire de cette façon
Utilisez plutôt ce qui suit
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 le type d'employé, vous appelez simplement cette macro comme:
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/objets de types de données.
Donc, 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 il vous suffit de vous rappeler de faire l'initialisation par défaut lorsque vous déclarez une nouvelle variable employé:
employee foo = employee_default;
Alternativement, vous pouvez simplement toujours créer votre structure d'employé via une fonction d'usine.
Si vous utilisez gcc
, vous pouvez donner designated initializers
dans la création d'objet.
typedef struct
{
int id=0;
char* name="none";
}employee;
employee e =
{
.id = 0;
.name = "none";
};
Ou, utilisez simplement l'initialisation du tableau comme.
employee e = {0 , "none"};
Plus encore, pour ajouter aux 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 implémenter une fonction d'initialisation:
employee init_employee() {
empolyee const e = {0,"none"};
return e;
}
Vous pouvez utiliser une combinaison de fonctions de préprocesseur C avec varargs , littéraux composés et initialiseurs désignés pour une commodité maximale:
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 lui créer une fonction:
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";
}
Si vous n'utilisez cette structure que pour ne fois, c'est-à-dire pour créer une variable globale/statique, vous pouvez supprimer typedef
et initialiser cette variable instantanément:
struct {
int id;
char *name;
} employee = {
.id = 0,
.name = "none"
};
Ensuite, vous pouvez utiliser employee
dans votre code après cela.