Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » C initialisation compacte
Ninestars En ligne Membre Points: 2413 Défis: 22 Message

C initialisation compacte

Posté le 19/12/2018 17:43

Salut à vous, y-a-t-il un moyen de compacter l'initialisation de ces variables pour ce passer de la vriable temporaire poly ?

const Poly poly[] = {
    {RECTANGLE, &tex_white, ...},
    {RECTANGLE, &tex_brique, ...},
    ...
}

struct Model
{
    const Poly* poly;
    int a;
    int b;
};

Model model = {poly, 34, 12};

J'aimerai pouvoir écrire :
struct Model
{
    const Poly* poly;
    int a;
    int b;
};

Model model = {
    {{RECTANGLE, &tex_white, ...},
    {RECTANGLE, &tex_brique, ...},
    ...},
    34,
    12
};

Merci


Lephenixnoir Hors ligne Administrateur Points: 21025 Défis: 143 Message

Citer : Posté le 19/12/2018 17:53 | #


Non, tel quel il n'y a pas moyen. La raison est que ton champ de type const Poly * est un pointeur, pour l'initialiser il faut donc que tu possèdes une adresse allouée par le linker. Le moyen de l'obtenir, c'est de déclarer le tableau comme tu l'as fait.

Toutefois, le C moderne te permet de créer une structure contenant un tableau à taille variable (non spécififée) à condition que ce soit le denier élément. Tu ne peux alors par prendre le sizeof du type (ou alors ça renvoie la taille sans le tableau final, je ne sais plus bien) et tu ne peux pas en faire des tableaux... mais tu peux faire ceci :

struct Model
{
  int a, b;
  const Poly poly[];
};

struct Model model = {
  34, 12,
  { ... }
};

Je doute que le SDK l'accepte, toutefois...

De toute façon je ne suis pas sûr que les inconvénients posés par ce type de structure soient ce que tu veux. C'est pas vraiment fait pour ça, je pense. Si tu le peux, je pense que garder le tableau que tu as est la meilleure solution.
Ninestars En ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 19/12/2018 17:59 | #


Merci pour la réponse, en effet, j'ai doirt à un "missin array size" ^^, dommage

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 75 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd