OVH Cloud OVH Cloud

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
espie
In article <4c4df374$0$3322$,
Samuel DEVULDER wrote:
Est-ce qu'on pourrait pousser le luxe jusqu'à avoir un int c[] dans toto
et que:

tab[2].c[3] = 5;

soit accepté? La détermination de la taille de tab, ainsi que celle de c
nécessiterait de maintenir pas mal d'info sur les indices max des
sous-elements de la structure en cours de route. Mais du coup on
pourrait carrément avoir cela pour les tableaux multi dimensionnels?

int tab[][];
tab[3][4] = 2;

Ca serait pas mal pour étendre les matrices creuses sans avoir à ajouter
des {} vides pour les lignes insérées.



Sans doute, peut-etre...

Au niveau du tres detaille, ca a un interet excessivement theorique, vu que
de toutes facons, le comite a decide d'etendre la syntaxe des initialiseurs,
et que donc maintenant on est coinces avec un langage bien plus gros que
si que me paraissait raisonnable...
Avatar
Gabriel Dos Reis
Antoine Leca writes:

| Marc Boyer écrivit :
Après, C99 n'avait pas forcément bonne presse (je ne
suis plus trop ça). En fait, certaines parties de la norme
C99 ne sont pas implantées par les compilateurs courants,
et je ne sais si cette fonctionnalité en fait partie.





| Celle fonctionnalité-là est plutôt bien accueillie.
| Mais c'est une invention du comité (par d'existant auparavant), donc il

Pas complètement ,je crois : il y avait une expérience existante avec GNU.
Avatar
Gabriel Dos Reis
(Marc Espie) writes:

[...]

| Et a cote, on n'a toujours pas les parametres anonymes comme en C++,

oui, mais je crois que le comité C99 se ravit de n'avoir que le style de
commentaire "//" de commun avec C++ :-)

et puis tout le monde sait qu'un paramètre se nomme ; t'as passé trop de
temps dans la jungle C++ :-)

-- Gaby
Avatar
Gabriel Dos Reis
Antoine Leca writes:

| Marc Espie écrivit :
In article <i2btoe$mu7$,
Antoine Leca wrote:
Mais c'est une invention du comité (par d'existant auparavant), do nc il
faut effectivement un compilo « récent » (= dont le d éveloppement s'est
poursuivi dans les 8 dernières années).



C'est un des trucs dont je ne vois pas trop l'interet.





| J'y voit deux intérêts :
| - initialiser des matrices creuses,

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

| et plus généralement les tableaux
| de manière plus limpide qu'avec les règles du K&R de complà ©mentation par
| des valeurs nulles ;
| - s'affranchir de la dépendance à l'ordre de déclaration des membres
| dans les initialisations de structures, ce qui devrait dans la pratique
| éviter les séries d'initialisations pour passer d'un objet à   un autre.

-- Gaby
Avatar
Gabriel Dos Reis
Alexandre Bacquart writes:

| Le comité accepte ce genre de fausses solutions ?

Oui. En ce moment, c'est le tour de Apple -- pour C1x.

GC, BLOCK, et j'en passe -- mais pas du tout comme en C++, hein.

-- Gaby
Avatar
Gabriel Dos Reis
(Marc Espie) writes:

[...]

| Au niveau ISO et C, c'est vaguement plus nuance. Entre autres parce qu'il y
| a d'autres communautes en dehors de la communaute Unix (microsoft,
| l'embarque...), mais il n'empeche: je ne pense pas que tu arriveras a fai re
| passer quoi que ce soit qui vienne d'Unix si:
| - ce n'est pas dans la glibc;
| - ca n'a pas ete implemente dans gcc.



| Ca va peut-etre un peu changer si Apple continue a s'investir dans llvm...

Parce que tu crois que les inventions (pour C1x) venant de Apple sont
meilleurs ?

L'ennemi de ton ennemi n'est pas forcément ton ami.

-- Gaby
Avatar
Gabriel Dos Reis
JKB writes:

[...]

| Je réagissais surtout en raison des joutes verbales que j'ai pu
| avoir avec ce type

oui, mais là, c'est la marque. :-)

-- Gaby
Avatar
Gabriel Dos Reis
Antoine Leca writes:

[...]

| Par ailleurs, j'écris avec des accents parce que je trouve cela plus
| 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 ? :-)

-- Gaby
Avatar
Gabriel Dos Reis
Samuel DEVULDER writes:


[...]

| Du coup ca m'intéresse d'avoir un exemple sur la façon de faire une
| chose pareille avec des opérateurs flottants un peu partout dans le
| code. Par exemple comment initialiserais tu les données suivantes:



| struct toto {
| int a;
| int b;
| } tab[] = {{.a=1}, {.b=2}, {.b=3, .a=4}};

Non, merci !

-- Gaby
Avatar
JKB
Le Wed, 28 Jul 2010 03:07:54 -0500,
Gabriel Dos Reis écrivait :
JKB writes:

[...]

| Je réagissais surtout en raison des joutes verbales que j'ai pu
| avoir avec ce type

oui, mais là, c'est la marque. :-)



Avec des vrais morceaux de mauvaise foi dedans. Le problème pour
Drepper, c'est qu'il part du principe qu'il n'a jamais tort même en
dépit du bon sens. Le risque, c'est de se retrouver avec des bouts
de codes qui fonctionnent partout sauf sous Linux en raison d'une
implantation bizarre de certaines fonctions violant les specs (et
l'unique réponse : 'je sais lire les specs parce que je les ai
écrites'). J'ai des exemples de codes qui fonctionnent partout (même
sous VMS, c'est dire) et qui terminent par un segfault sous Linux,
codes aujourd'hui bourré de workarounds linuxiens.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
=> http://grincheux.de-charybde-en-scylla.fr
2 3 4 5 6