Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

initialisation d'une structure static lors de sa delcaration

13 réponses
Avatar
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.

Merci,
Arnaud.

3 réponses

1 2
Avatar
Jean-Marc Bourguet
"Antoine Leca" writes:

En , 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


Avatar
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?


http://anubis.dkuug.dk/jtc1/sc22/wg14/www/docs/dr_263.htm

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



Avatar
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?


http://anubis.dkuug.dk/jtc1/sc22/wg14/www/docs/dr_263.htm


Interessant.

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




1 2