initialisation d'une structure static lors de sa delcaration
13 réponses
Arnaud Leconte
Bonjour,
Je developpe en proC qui est un langage oracle permettant d'ajouter des
appels SQL directement dans le code C.
Le principe est un pro Compilateur lit le code et le transforme en C.
J'ai besoin d'initialiser une structure static mais je ne connais pas sa
definition.
Le code generé peut être
int fct()
{
static Struct {
int len;
char arr[10];
} var;
}
ou
int fct()
{
static Struct {
char arr[10];
int len;
} var;
}
Das mon cas j'ai besoin d'avoir len initialisé à 0 et arr en chaine vide.
Actuellement j'utilise un short static qui m'indique si j'ai ou pas
initialisé ma structure.
Il n'y pas de problèmes de cast. L'initinitialion "à zéro" initialise tous les pointeurs à des pointeurs nuls, tous les flottants à 0.0, et tous les entiers et les chars à "tous les bits 0".
Ce en quoi elle diffère de calloc(), qui ne donne la même garantie que pour les entiers (et chars).
calloc donne cette garantie pour les entiers? C99 ne supporte plus les architectures a tag ou le tag d'un entier ne serait pas 0?
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Antoine Leca" <root@localhost.gov> writes:
En 35aa90digob0chpmgungvdik90ddr3fj4g@4ax.com, Horst Kraemer va escriure:
Il n'y pas de problèmes de cast. L'initinitialion "à zéro" initialise
tous les pointeurs à des pointeurs nuls, tous les flottants à 0.0, et
tous les entiers et les chars à "tous les bits 0".
Ce en quoi elle diffère de calloc(), qui ne donne la même garantie que pour
les entiers (et chars).
calloc donne cette garantie pour les entiers? C99 ne supporte plus
les architectures a tag ou le tag d'un entier ne serait pas 0?
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Il n'y pas de problèmes de cast. L'initinitialion "à zéro" initialise tous les pointeurs à des pointeurs nuls, tous les flottants à 0.0, et tous les entiers et les chars à "tous les bits 0".
Ce en quoi elle diffère de calloc(), qui ne donne la même garantie que pour les entiers (et chars).
calloc donne cette garantie pour les entiers? C99 ne supporte plus les architectures a tag ou le tag d'un entier ne serait pas 0?
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Antoine Leca
En , Jean-Marc Bourguet va escriure:
"Antoine Leca" writes:
Il n'y pas de problèmes de cast. L'initinitialion "à zéro" initialise tous les pointeurs à des pointeurs nuls [...]
Ce en quoi elle diffère de calloc(), qui ne donne la même garantie que pour les entiers (et chars).
calloc donne cette garantie pour les entiers? C99 ne supporte plus les architectures a tag ou le tag d'un entier ne serait pas 0?
Ce n'est encore qu'un "défaut corrigé", donc officiellement il faut attendre qu'il passe comme CT. Mais on peut considérer que c'est ce qui a été décidé; donc les "architectures à tags" avec parité impaire (par exemple) ne peuvent pas être rendues complètement conforme C99 (à ce que j'en comprend, je n'ai jamais travaillé avec un tel bestiau. Tu en connais une ?)
Attention, le problème ne concerne que 0, à cause de memset() et calloc(). Les architectures à tag en général ne sont pas mises à l'index, tant qu'elles ne bronchent pas sur all-0.
Antoine
En pxbn04pn4yw.fsf@news.bourguet.org, Jean-Marc Bourguet va escriure:
"Antoine Leca" <root@localhost.gov> writes:
Il n'y pas de problèmes de cast. L'initinitialion "à zéro"
initialise tous les pointeurs à des pointeurs nuls [...]
Ce en quoi elle diffère de calloc(), qui ne donne la même garantie
que pour les entiers (et chars).
calloc donne cette garantie pour les entiers? C99 ne supporte plus
les architectures a tag ou le tag d'un entier ne serait pas 0?
Ce n'est encore qu'un "défaut corrigé", donc officiellement il faut attendre
qu'il passe comme CT. Mais on peut considérer que c'est ce qui a été décidé;
donc les "architectures à tags" avec parité impaire (par exemple) ne peuvent
pas être rendues complètement conforme C99 (à ce que j'en comprend, je n'ai
jamais travaillé avec un tel bestiau. Tu en connais une ?)
Attention, le problème ne concerne que 0, à cause de memset() et calloc().
Les architectures à tag en général ne sont pas mises à l'index, tant
qu'elles ne bronchent pas sur all-0.
Ce n'est encore qu'un "défaut corrigé", donc officiellement il faut attendre qu'il passe comme CT. Mais on peut considérer que c'est ce qui a été décidé; donc les "architectures à tags" avec parité impaire (par exemple) ne peuvent pas être rendues complètement conforme C99 (à ce que j'en comprend, je n'ai jamais travaillé avec un tel bestiau. Tu en connais une ?)
Attention, le problème ne concerne que 0, à cause de memset() et calloc(). Les architectures à tag en général ne sont pas mises à l'index, tant qu'elles ne bronchent pas sur all-0.
Antoine
Jean-Marc Bourguet
"Antoine Leca" writes:
En , Jean-Marc Bourguet va escriure:
"Antoine Leca" writes:
Il n'y pas de problèmes de cast. L'initinitialion "à zéro" initialise tous les pointeurs à des pointeurs nuls [...]
Ce en quoi elle diffère de calloc(), qui ne donne la même garantie que pour les entiers (et chars).
calloc donne cette garantie pour les entiers? C99 ne supporte plus les architectures a tag ou le tag d'un entier ne serait pas 0?
Ce n'est encore qu'un "défaut corrigé", donc officiellement il faut attendre qu'il passe comme CT. Mais on peut considérer que c'est ce qui a été décidé; donc les "architectures à tags" avec parité impaire (par exemple) ne peuvent pas être rendues complètement conforme C99 (à ce que j'en comprend, je n'ai jamais travaillé avec un tel bestiau. Tu en connais une ?)
J'ai le souvenir que les Lisp Machines etaient des machines a tag de meme que je suis sur d'une autre encore plus confidentielle (a part les gens du labo qui l'a developpee, nous ne devons pas etre tres nombreux a nous en souvenir). Je ne sais pas si celui des entiers etait 0 ou pas. Je ne sais pas si les Lisp Machines ont jamais ete programmees en C, l'autre archi, je suis sur que non.
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
"Antoine Leca" <root@localhost.gov> writes:
En pxbn04pn4yw.fsf@news.bourguet.org, Jean-Marc Bourguet va escriure:
"Antoine Leca" <root@localhost.gov> writes:
Il n'y pas de problèmes de cast. L'initinitialion "à zéro"
initialise tous les pointeurs à des pointeurs nuls [...]
Ce en quoi elle diffère de calloc(), qui ne donne la même garantie
que pour les entiers (et chars).
calloc donne cette garantie pour les entiers? C99 ne supporte plus
les architectures a tag ou le tag d'un entier ne serait pas 0?
Ce n'est encore qu'un "défaut corrigé", donc officiellement il faut
attendre qu'il passe comme CT. Mais on peut considérer que c'est ce
qui a été décidé; donc les "architectures à tags" avec parité
impaire (par exemple) ne peuvent pas être rendues complètement
conforme C99 (à ce que j'en comprend, je n'ai jamais travaillé avec
un tel bestiau. Tu en connais une ?)
J'ai le souvenir que les Lisp Machines etaient des machines a tag de
meme que je suis sur d'une autre encore plus confidentielle (a part
les gens du labo qui l'a developpee, nous ne devons pas etre tres
nombreux a nous en souvenir). Je ne sais pas si celui des entiers
etait 0 ou pas. Je ne sais pas si les Lisp Machines ont jamais ete
programmees en C, l'autre archi, je suis sur que non.
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Ce n'est encore qu'un "défaut corrigé", donc officiellement il faut attendre qu'il passe comme CT. Mais on peut considérer que c'est ce qui a été décidé; donc les "architectures à tags" avec parité impaire (par exemple) ne peuvent pas être rendues complètement conforme C99 (à ce que j'en comprend, je n'ai jamais travaillé avec un tel bestiau. Tu en connais une ?)
J'ai le souvenir que les Lisp Machines etaient des machines a tag de meme que je suis sur d'une autre encore plus confidentielle (a part les gens du labo qui l'a developpee, nous ne devons pas etre tres nombreux a nous en souvenir). Je ne sais pas si celui des entiers etait 0 ou pas. Je ne sais pas si les Lisp Machines ont jamais ete programmees en C, l'autre archi, je suis sur que non.
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org