initialisation de structure

Le
batyann811
Bonjour,

J'ai un petit bout de programme C qui ne compile pas avec gcc et je ne
vois pas ou est le problème.

#include <stdio.h>
#include <stdlib.h>

struct point { int x, y; };

const struct point p1 = { 0, 0 };

struct point p2 = p1; /* !!! : inititializer element is not constant */

int main(int argc, char** argv) {
return (EXIT_SUCCESS);
}

Pourquoi l''initializer element' n'est il pas constant ???
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
batyann811
Le #18024081
Après quelques recherches sur internet il semblerait que
l'initialisation ne soit possible qu'avec des 'constantes littérales'.
Un peu pénible mais bon...
Vincent Lefevre
Le #18024941
Dans l'article batyann811
Après quelques recherches sur internet il semblerait que
l'initialisation ne soit possible qu'avec des 'constantes littérales'.



Pas forcément. Toute expression constante convient. Mais une variable,
même "const", ne forme pas une expression constante.

Un peu pénible mais bon...



Oui, c'est dommage qu'on ne puisse pas créer de vraies constantes.
L'utilisation du préprocesseur reste un hack.

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
espie
Le #18024931
In article batyann811
Après quelques recherches sur internet il semblerait que
l'initialisation ne soit possible qu'avec des 'constantes littérales'.
Un peu pénible mais bon...



Oui, le C possede de nombreuses limitations de cet ordre. C'est quand meme
un langage de relativement bas niveau par rapport a d'autres.

Si tu trouves ca trop penible, tu es mur pour le C++ (et son cortege
d'autres soucis)... ;-)
batyann811
Le #18025161
Marc Espie wrote:

Si tu trouves ca trop penible, tu es mur pour le C++ (et son cortege
d'autres soucis)... ;-)


Pour me retrouver avec des trucs aussi lisibles que ça :

for ( map < pair<Truc*,Truc*> , set<Truc*> >::iterator it=m.begin() ;
it!=m.end() ; it++ )
{ ... }

Non merci ! ;-)
espie
Le #18025281
In article batyann811
Marc Espie wrote:

Si tu trouves ca trop penible, tu es mur pour le C++ (et son cortege
d'autres soucis)... ;-)


Pour me retrouver avec des trucs aussi lisibles que ça :

for ( map < pair<Truc*,Truc*> , set<Truc*> >::iterator it=m.begin() ;
it!=m.end() ; it++ )
{ ... }



En C++0x, ca devrait etre plus lisible, genre
for (auto it=m.begin() ; it != m.end(); ++it) {
}

Ceci dit, je ne trouve pas cet iterateur si incomprehensible que ca,
par rapport a d'autres soucis...

Et a cote de ca, c'est quand meme un beau troll: ce genre de choses ne
peut pas arriver en C, puisqu'aucun des concepts n'est supporte par le
langage, et donc qu'il faut tout faire a la main (et sans verification de
type, si on veut du polymorphisme; et avec de gros sales bouts de
preprocesseur si on veut vraiment faire comme en C++).
Marc Boyer
Le #18025271
On 2008-12-02, batyann811
Marc Espie wrote:

Si tu trouves ca trop penible, tu es mur pour le C++ (et son cortege
d'autres soucis)... ;-)


Pour me retrouver avec des trucs aussi lisibles que ça :

for ( map < pair<Truc*,Truc*> , set<Truc*> >::iterator it=m.begin() ;
it!=m.end() ; it++ )
{ ... }

Non merci ! ;-)



Un parcours d'une table dont les clef sont des paire de
pointeurs et les éléments des ensembles de pointeurs, je ne
pense pas que ce soit super lisible en C pour rester en charte.

Marc Boyer
--
En France, un habitant sur 1000 est en prison.
Aux USA, 7 habitants sur 1000 sont en prison.
Est-ce que les USA sont 7 fois plus sûrs ?
Marc Boyer
Le #18025261
On 2008-12-02, batyann811
Après quelques recherches sur internet il semblerait que
l'initialisation ne soit possible qu'avec des 'constantes littérales'.
Un peu pénible mais bon...



Et oui, const n'est pas une constante. Pour s'en souvenir,
l'écrivais à mes étudiants

const l = random();

l est bien const. De là à ce que ce soit une constante...

Marc Boyer
--
En France, un habitant sur 1000 est en prison.
Aux USA, 7 habitants sur 1000 sont en prison.
Est-ce que les USA sont 7 fois plus sûrs ?
-ed-
Le #18109181
On 2 déc, 15:08, batyann811
J'ai un petit bout de programme C qui ne compile pas avec gcc et je ne
vois pas ou est le problème.




Pourquoi l''initializer element' n'est il pas constant ???



Ne pas confondre 'variable à lecture seule' et 'expression constante'.

struct point
{
int x, y;
};

#define INIT { 3, 4 }

struct point p1 = INIT;
struct point p2 = INIT;

int main (void)
{
return 9;
}
Eric Levenez
Le #18109261
Le 11/12/08 07:35, dans
« -ed- »
int main (void)
{
return 9;
}



9 ? Tu es sûr ?

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.
-ed-
Le #18109851
On 11 déc, 07:57, Eric Levenez
Le 11/12/08 07:35, dans
« -ed- »
> int main (void)
> {
>    return 9;
> }

9 ? Tu es sûr ?



Non ! Mon doigt a glissé. C'est 0, bien sûr...
Publicité
Poster une réponse
Anonyme