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

Passage de structure en paramètre d'une fonction

55 réponses
Avatar
Rémi BERTHOLET
Bonjour,

J'ai un code qui ressemble =E0 cela :

struct MaStructure
{
int x;
int y;
};


void MaFonction(struct MaStructure)
{
...
}


Je peux appeler ma fonction en faisant :
struct MaStructure data =3D {0,0};
MaFonction(data);

Mais je voudrais faire quelque chose comme cela :
MaFonction({0,0});

Existe t'il une syntaxe en C pour le faire ?

Merci

10 réponses

2 3 4 5 6
Avatar
Gabriel Dos Reis
JKB writes:

[...]

| 'je sais lire les specs parce que je les ai écrites').

Oui. :-)

-- Gaby
Avatar
Gabriel Dos Reis
Antoine Leca writes:

| Gabriel Dos Reis a écrit :
Antoine Leca writes:

[...]

| Par ailleurs, j'écris avec des accents parce que je trouve cela p lus
| joli, même s'il faut que je presse deux touches (l'une à c ôté du Ñ ou du
| P, puis la voyelle) ; mais pour taper un nombre, je n'ai besoin
| d'appuyer que sur une seule touche...

T'es comptable ces temps-ci ? :-)





| Plus souvent qu'informaticien, en fait. :-Þ

Ah, c'était bien avang..




| Lorsque tu fais de l'informatique, il y a quatre grand débouché s :
| l'enseignement, l'infrastructure (ce qui inclut les télécoms), les
| bureaux d'études et l'informatique de gestion (j'y inclus la bureaut ique
| qui a les mêmes modes de fonctionnement). Et aucune des branches n'a de
| raisons d'être dévaluées par rapport aux autres.




| Bon, on a dérivé, si on revenait au C (oui oui, je sais, C et i nfo de
| gestion, c'est plutôt éloigné dans la pratique...)

Excuse-moi, il est encore très tôot ici ; quelle était la qu estion ?

-- Gaby
Avatar
Gabriel Dos Reis
Samuel DEVULDER writes:

| Gabriel Dos Reis a écrit :

Je n'ai pas encore rencontré un logiciel où c'était le ca s et où cette
notation rendait le code plus simple et plus clair.





| Il me semble avoir vu cela dans un fichier C décrivant les config de
| trames/signaux pour les messageries dans un contexte industriel. Le
| fichier était monstrueusement long mais ne contenait que les champs
| réellement initialisés.

Dans une telle situation comment sait-on qu'il n'y a pas de bug dans la
config ?

| Je n'ose pas imaginer la tête du fichier s'il contenait toutes les
| valeurs y compris des zéros pour les valeurs non initialisées. Pas
| facile de retrouver et changer les valeurs pertinentes entre ces
| zéros, ni la catastrophe à gérer si un ou deux zéros étaient ajoutées
| ou effacées par accident.

Si on en arrive à un tel point d'assurance spontané, on est dà ©jà perdu
-- c'est ce sucre syntaxique de C99 qui va sauver.

-- Gaby
Avatar
Gabriel Dos Reis
Samuel DEVULDER writes:

| Gabriel Dos Reis a écrit :
Samuel DEVULDER writes:

| Gabriel Dos Reis a écrit :
Je n'ai pas encore rencontré un logiciel où c'était le cas et où cette
notation rendait le code plus simple et plus clair.




| Il me semble avoir vu cela dans un fichier C décrivant les config de
| trames/signaux pour les messageries dans un contexte industriel. Le
| fichier était monstrueusement long mais ne contenait que les cham ps
| réellement initialisés.

Dans une telle situation comment sait-on qu'il n'y a pas de bug dans la
config ?





| Ca devait probablement être des trucs sortis d'une base de donnà ©e par
| une extraction automatique car je doute que quelqu'un ait saisi tous
| les paramètres un à un.

Dans ce cas, l'argument initial me semble peu convaincant.

| Par contre une fois sorti dans le C, loin de
| la base de donnée, il peut être important de pouvoir relire fac ilement
| ces suites de nombres et savoir à quoi elle se rattachent sans croul er
| sous les valeurs nulles indifférenciées.

tu veux dire que tu doutes que quelqu'un ait saisi tous les paramêtres
un à un, mais que quelqu'un va les vérifier un à un ? Amazi ng.

| En tout cas je me dis que si certains ont jugés que c'était uti le,
| c'est probablement pas sans raison et que cela a du servir.

Tu serais étonné de voir le nombre de choses que certaines person nes
jugent utiles... De là à les mettre dans une norme...

| Force est
| de constater que je suis tombé dessus effectivement et qu'une fois
| passée le réflexe de rejet: "c'est quoi ce truc? jamais vu! C'e st pas
| le C que je connais.

Pour te rassurer, ma réaction ne vient pas de non-familiarité. Au
contraire !

| Ca veut dire quoi?", j'ai trouvé qu'effectivement
| ça se lisait facilement et pouvait même être une aide prat ique dans le
| contexte.

Ahem.

-- Gaby
Avatar
Gabriel Dos Reis
Samuel DEVULDER writes:

| Gabriel Dos Reis a écrit :

| Par contre une fois sorti dans le C, loin de
| la base de donnée, il peut être important de pouvoir relire facilement
| ces suites de nombres et savoir à quoi elle se rattachent sans cr ouler
| sous les valeurs nulles indifférenciées.

tu veux dire que tu doutes que quelqu'un ait saisi tous les paramêt res
un à un, mais que quelqu'un va les vérifier un à un ?





| Non ca n'est pas ce que j'ai dit. Personne ne parle de vérifier quoi
| que ce soit un à un, surtout pas dans le contexte.

alors, si personne ne va aller vérifier ces données une à un e, comment
l'exemple illustre-t-il la nécessité de l'invention de C99 ?

| Typiquement tu es sur la carte embarquée avec tes sondes à espi onner
| le bouzin avec le debugger de la carte qui te présente le code C dans
| winIDEA loin de la base de donnée (tu es pour ainsi dire dans le
| véhicule) et tu cherches à retrouver à quel numéro de bit de la trame
| No se trouve le signal bidule.
|
| Les "designated field" permettent de retrouver plus facilement l'info
| dans le code.

oh, si maintenant on utilise un autre outil pour analyser ces données,
l'outil est libre de présenter/afficher les données dans n'import e quel
format qu'il veut. On n'a pas besoin que le comité C99 fasse une
invention pour cela.

| Beaucoup mieux que si le même tableau était complètement
| rempli avec toutes les valeurs, zéros compris (source plus compact,
| navigation aisée etc).
|
| Tout cela pour signaler que ca n'est pas parce que tu n'a jamais vu
| cette notation utilisée dans un code source ni utilisée sur le terrain
| que cela ne sert à rien pour tout le monde.

Je ne comprends toujours pas comment l'exemple est une illustration de
la chose. Est-ce parce qu'il est étriqué ?


Tu serais étonné de voir le nombre de choses que certaines per sonnes
jugent utiles... De là à les mettre dans une norme...





| Ben l'avantage de la norme fait que tous les outils que tu greffes
| autour parlent la même langue et savent travailler entre-eux. Dans
| l'industrie l'inter-opérabilité des outils est tellement import ante
| que tout compte fait beaucoup de normes ne servent pratiquement qu'à
| cela parce que techniquement elles sont dépassée, ou loin d'à ªtre des
| chefs-d'œuvre de performances et d'ingéniosité.

?

| Après ca n'est pas parce que c'est dans la norme qu'il faut l'utilis er
| obligatoirement.

Exact, mais pourquoi l'inventer et la mettre dans la norme en premier
lieu ?

-- Gaby
Avatar
Gabriel Dos Reis
Samuel DEVULDER writes:

| Gabriel Dos Reis a écrit :
Samuel DEVULDER writes:

| Gabriel Dos Reis a écrit :
| Par contre une fois sorti dans le C, loin de
| la base de donnée, il peut être important de pouvoir relir e facilement
| ces suites de nombres et savoir à quoi elle se rattachent sans crouler
| sous les valeurs nulles indifférenciées.

tu veux dire que tu doutes que quelqu'un ait saisi tous les paramà ªtres
un à un, mais que quelqu'un va les vérifier un à un ?




| Non ca n'est pas ce que j'ai dit. Personne ne parle de vérifier q uoi
| que ce soit un à un, surtout pas dans le contexte.

alors, si personne ne va aller vérifier ces données une à une,





| Pourquoi parles tu d'aller vérifier, et surtout "une à une"?

Je suis surpris que tu poses la question.
J'essaie de comprendre en quoi ton exemple est relié à, et se jus tifie par
rapport à mon observation initiale en ce qui concerne l'invention de C 99.

| Ca n'a rien à voir avec mon propos.

Ah ? Quel est-il alors ?

| Je pense qu'on ne parle pas de la même chose.

et quelle est cette même chose dont on ne parle pas ?

| Je me fiche de vérifier quoi que ce soit une à une dans les dat a, je

OK.

| voulais juste retrouver une info dans le fichier et naviguer
| facilement dedans.

Oui. Pourquoi l'invention de C99 est-elle nécessaire pour ça ?

| Le fait est que l'utilisation des "designated
| field" s'est révélé pratique pour cela.

Pour l'humain ou pour la machine ?

| Voila qui répond à la phrase où tu disais que tu n'avais j ammais vu ni
| trouvé un intérêt à cette syntaxe.

Ce n'est pas exactement ce que j'ai dit.
Je note en passant que ta réponse respose jusqu'à présent su r un
scenario purement spéculatif dont le détails changent à mess age.

| Moi je l'ai vu et sur le coup j'ai trouvé de l'intérêt. Les
| expériences de chacun sont différentes bien entendu.

Je ne doute pas une seconde que tu aies vu des choses.
Je suis intéressé par une analyse rationelle qui justifierait cet te
invention dans la norme.

[...]

| Le comité est là pour officialiser une syntaxe de sorte que tou s les
| outils savent se comprendre et utilisent la même convention pour
| représenter la même chose.

Le comité est là pour codifier la pratique existante.

[...]

| Un standard adopté n'est pas forcément le meilleurs, le plus
| intelligent ou le mieux foutu car il y a beaucoup d'autres paramètres
| à prendre en compte. Une norme un peu "en dessous" mais acceptée
| universellement vaut mieux que pas de norme du tout.

Le décompte du vote officiel ISO sur la norme C99 a montré que le « oui »
était loin des 100 %. Je crois que tu viens de donner un nouveau sense
à « universellement. »

[...]

| Par ce que besoin de normalisation s'est fait sentir, c'est tout.

Tu le sais parce que tu as participé à son invention ?
Ou, juste parce que tu as lu la ligne officielle du parti ?

-- Gaby
Avatar
Gabriel Dos Reis
Antoine Leca writes:

| Gabriel Dos Reis écrivit :
Le comité est là pour codifier la pratique existante.





| Euh, non, pas en général. Ça, c'est la position réduc trice où certains
| voudraient mettre un comité (en général, il s'agit d'autre s comités...)
| pour « éviter qu'il ne fasse trop de dégâts ».

et on peut argumenter, au vu de C99, qu'ils ont raison.

-- Gaby
Avatar
Gabriel Dos Reis
Samuel DEVULDER writes:

| Gabriel Dos Reis a écrit :

alors, si personne ne va aller vérifier ces données une à   une,




| Pourquoi parles tu d'aller vérifier, et surtout "une à une"?

Je suis surpris que tu poses la question.
J'essaie de comprendre en quoi ton exemple est relié à, et se justifie par
rapport à mon observation initiale en ce qui concerne l'invention d e C99.





| Non. Je réponds à ta réponse à A.Leca: /Je n'ai pas e ncore rencontré
| un logiciel où c'était le cas et où cette notation rendait le code
| plus simple et plus clair./



| La dessus je te dis que moi je l'ai vu et que j'ai trouvé ca
| pratique.

Cependant, la description reste au mieux spéculative, un peu comme les UFO...
J'aimerais croire.

| Rien de plus, rien de moins. Ne viens pas me parler des
| histoires de vérif de données une à une.

J'aimerais comprendre ce que tu as vu, parce que jusqu'à présent, cela
me paraît loufoque -- sans vouloir offenser.

| Ca n'a rien à voir avec le sujet.

Si ce que tu as vu résiste à une analysae rationnelle, alors on p eut
raisonablement considérer que tu ne répondais pas à ma remar que.

Le décompte du vote officiel ISO sur la norme C99 a montré que le « oui »
était loin des 100 %.





| C'est un compromis.

Ah, tu passes maintenant de « universelle adoption » à  « compromis. »
On progresse.

Un compromis est une situation où personne n'est content mais tout le
monde est satisfait ; du moins dans le cas de C99, en considérant les
votes et les objections à l'époque, c'est vrai.

| Ca semble te déranger. Moi pas, c'est le principe d'un vote.

Peux-tu m'expliquer ce principe plus précisément dans le case de la
norme ISO C ?

| Tu voudrais invalider tous choix issus de votes qui ne sont
| pas unanimes?

J'ai comme l'impression que tu aurais encore vu des UFO là où il n'y en
a pas : qui parle d'invalider excepter toi dans ce message ?

| Pas grand chose ne serait standardisé, et on trouverait
| foultitude de syntaxe et conventions propriétaires incompatible les
| unes avec les autres. Beau résultat!

Et dans le cas de C99, on peut se demander, finalement, quel est le
résulat (et encore moins sa beauté). 11 ans après son adopt ion
officielle, la majorité des compilateurs influants n'implémentent que de
petits bouts. À moins de disposer d'une redéfinition locale de
« adoption universelle, » cela me paraît plus comme un fiasc o.

| Cette syntaxe est adoptée.

Oui, et ?

| Tous les outils d'une chaine de
| compilation/debug conformes savent comment l'interpréter.

en théorie, oui.
Cela n'empêche nullement de discuter de la sagesse d'une telle dé cision.

| C'est parfait!

Je crois que nous devons avoir des acceptions assez différentes de
« perfection. »

| Que demander de plus de la part d'un comité de normalisation?

qu'il se arrete les inventions ou qu'il prenne la retraite.

| Ils ont fait leur job. C'est bien.

Et qu'elle était la description de ce job, d'après toi ?

-- Gaby
Avatar
espie
In article <i2u0ud$rbo$,
Antoine Leca wrote:
Et si on reprend C9X, une des principales raisons pour laquelle le
processus est allé jusqu'au bout, c'est pour permettre d'officialiser un
support des entiers 64 bits. S'il on était resté au niveau de
« la pratique existante » (avec deux solutions possibles, long long et
LP64), on aurait eu au niveau global les mêmes problèmes que ceux qu'ont
rencontré MIPS puis Sun, à savoir passer successivement par les deux
solutions durant tout le temps de la transition : l'apport de C99 à ce
niveau est toute une formalisation du système de types entiers, qui
justement n'était pas l'existant.



C'est un des rares ajouts peu controverses de C99.
Si on regarde, les types entiers d'une certaine taille sont "bien passes".
Les macros correspondantes pour printf() sont vues comme tres, tres moches
et peu elegantes.

Le fait de ne plus pouvoir faire printf("%lu", (long)sz) sur des size_t
est une connerie qui fait chier un peu tout le monde.

Les extensions a i18n etaient deja presentes dans le TR a C89.

Quant au reste, c'est un peu connerie sur connerie. Je me souviens bien si
restrict etait present dans C89 ou pas...
Avatar
Antoine Leca
Marc Espie écrivit :
Les macros correspondantes pour printf() sont vues comme tres, tres moches



+1

et peu elegantes.



sauf qu'elles ont le mérite de pouvoir d'adapter à des environnement C90
ce qui est une certaine élégance. ÀMHA.


Le fait de ne plus pouvoir faire printf("%lu", (long)sz) sur des size_t
est une connerie qui fait chier un peu tout le monde.



Tu sais bien que le transtypage universel en long ne pouvait pas rester,
il fallait trancher entre « long vaut au moins 32 bits » et « long est
le plus grand type entier », et dès 1995 le « marché » avait fait son
choix ; on peut le regretter, ne pas être d'accord ou ce que l'on veut,
mais il faut faire avec, et donc manger son chapeau... Et ce n'est pas
la faute de C99, pour le coup le comité n'a fait qu'entériner.

Parmi les différentes possibilités, on a
printf("%zu", sz); /* Nécessite C99; raisonnablement intuitif */
ou
printf("%ju", (uintmax_t)sz);
/* Nécessite C99; pas franchement intuitif */
ou
printf("%"PRIuMAX, (uintmax_t)sz); /* Adaptable à C90; laid */
ou
printf("%lu", (unsigned long)sz);
/* Peut parfois donner des résultats faux */
ou
printf("%llu", (unsigned long long)sz);
/* Pourra théoriquement donner des résultats faux;
cassé sur certaines implémentations anciennes */

Il n'y a rien qui soit parfait ; mais je trouve que la dernière, qui
aurait été la solution officielle si « le comité [était] là pour
codifier la pratique existante » cumule les inconvénients.


Quant au reste, c'est un peu connerie sur connerie. Je me souviens bien si
restrict etait present dans C89 ou pas...



Non, suite entre autres à une intervention de DMR, il n'y avait que
const et volatile dans la norme C89
Pas le truc le plus propre de C89, d'ailleurs.
En fait, c'est tout le concept (C89) de /qualificateur/ qui fait
problème, cela n'a pas toujours le niveau de précision suffisant car il
s'agit souvent d'ajouter des informations complémentaires sur le type,
donc plus ou moins de gris, mais pas de discriminer (blanc ou noir)
entre par exemple entiers ou flottants, ou entre différents espaces
mémoire. Et bien sûr, quand on veut définir une couleur, on a des
appréciations différentes suivant les points de vue...


Antoine
2 3 4 5 6