Je me demande pourquoi l'initialisation partielle des 'struct' en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99). La norme du C++ date de 98...
et comment le réaliser :
la ? initialisation est feminin
Tu ne peux pas. Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets. En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs et surcharge d'operateurs sont bien plus puissants...
#include <sys/time.h>
int main (void) { struct timeval x = { .tv_usec = 2 }; return x.tv_usec; }
#include <sys/time.h>
int main (void) { struct timeval x; x.tv_usec = 2; return x.tv_usec; }
In article <ikq9rm$2e5$1@news.laas.fr>, david <deyv@free.fr> wrote:
Bonjour,
Je me demande pourquoi l'initialisation partielle des 'struct'
en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99).
La norme du C++ date de 98...
et comment le réaliser :
la ?
initialisation est feminin
Tu ne peux pas.
Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets.
En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs
et surcharge d'operateurs sont bien plus puissants...
#include <sys/time.h>
int main (void)
{
struct timeval x = { .tv_usec = 2 };
return x.tv_usec;
}
#include <sys/time.h>
int main (void)
{
struct timeval x;
x.tv_usec = 2;
return x.tv_usec;
}
Je me demande pourquoi l'initialisation partielle des 'struct' en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99). La norme du C++ date de 98...
et comment le réaliser :
la ? initialisation est feminin
Tu ne peux pas. Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets. En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs et surcharge d'operateurs sont bien plus puissants...
#include <sys/time.h>
int main (void) { struct timeval x = { .tv_usec = 2 }; return x.tv_usec; }
#include <sys/time.h>
int main (void) { struct timeval x; x.tv_usec = 2; return x.tv_usec; }
James Kanze
On Mar 4, 9:02 am, david wrote:
Je me demande pourquoi l'initialisation partielle des 'struct' en C n'est pas syntaxiquement correcte en C++ et comment le réaliser :
#include <sys/time.h>
int main (void) { struct timeval x = { .tv_usec = 2 }; return x.tv_usec; }
La raison est simple : cette syntaxe a été ajoutée dans C99, et C++ se base sur C90. Et personne ne s'en est occupé pour la porter dans C++0x. (Autant que je sache, en tout cas.)
Quant à la solution, je ne vois que de wrapper la struct dans une classe, avec un constructeur. Il y aura slicing si par la suite tu utilises la classe où une valeur de type timeval est attendue, mais si tout ce que la classe apporte, c'est les constructeurs, ce slicing est sans consequence.
-- James Kanze
On Mar 4, 9:02 am, david <d...@free.fr> wrote:
Je me demande pourquoi l'initialisation partielle des 'struct'
en C n'est pas syntaxiquement correcte en C++ et comment le
réaliser :
#include <sys/time.h>
int main (void)
{
struct timeval x = { .tv_usec = 2 };
return x.tv_usec;
}
La raison est simple : cette syntaxe a été ajoutée dans C99, et
C++ se base sur C90. Et personne ne s'en est occupé pour la
porter dans C++0x. (Autant que je sache, en tout cas.)
Quant à la solution, je ne vois que de wrapper la struct dans
une classe, avec un constructeur. Il y aura slicing si par la
suite tu utilises la classe où une valeur de type timeval est
attendue, mais si tout ce que la classe apporte, c'est les
constructeurs, ce slicing est sans consequence.
Je me demande pourquoi l'initialisation partielle des 'struct' en C n'est pas syntaxiquement correcte en C++ et comment le réaliser :
#include <sys/time.h>
int main (void) { struct timeval x = { .tv_usec = 2 }; return x.tv_usec; }
La raison est simple : cette syntaxe a été ajoutée dans C99, et C++ se base sur C90. Et personne ne s'en est occupé pour la porter dans C++0x. (Autant que je sache, en tout cas.)
Quant à la solution, je ne vois que de wrapper la struct dans une classe, avec un constructeur. Il y aura slicing si par la suite tu utilises la classe où une valeur de type timeval est attendue, mais si tout ce que la classe apporte, c'est les constructeurs, ce slicing est sans consequence.
-- James Kanze
david
James Kanze wrote:
On Mar 4, 9:02 am, david wrote:
> Je me demande pourquoi l'initialisation partielle des 'struct' > en C n'est pas syntaxiquement correcte en C++ et comment le > réaliser :
> #include <sys/time.h> > > int main (void) > { > struct timeval x = { .tv_usec = 2 }; > return x.tv_usec; > }
La raison est simple : cette syntaxe a été ajoutée dans C99, et C++ se base sur C90. Et personne ne s'en est occupé pour la porter dans C++0x. (Autant que je sache, en tout cas.)
Quant à la solution, je ne vois que de wrapper la struct dans une classe, avec un constructeur. Il y aura slicing si par la suite tu utilises la classe où une valeur de type timeval est attendue, mais si tout ce que la classe apporte, c'est les constructeurs, ce slicing est sans consequence.
D'accord, merci pour les éclaircissements, et pour bien connaitre les historiques des normes !
david
James Kanze <james.kanze@gmail.com> wrote:
On Mar 4, 9:02 am, david <d...@free.fr> wrote:
> Je me demande pourquoi l'initialisation partielle des 'struct'
> en C n'est pas syntaxiquement correcte en C++ et comment le
> réaliser :
> #include <sys/time.h>
>
> int main (void)
> {
> struct timeval x = { .tv_usec = 2 };
> return x.tv_usec;
> }
La raison est simple : cette syntaxe a été ajoutée dans C99, et
C++ se base sur C90. Et personne ne s'en est occupé pour la
porter dans C++0x. (Autant que je sache, en tout cas.)
Quant à la solution, je ne vois que de wrapper la struct dans
une classe, avec un constructeur. Il y aura slicing si par la
suite tu utilises la classe où une valeur de type timeval est
attendue, mais si tout ce que la classe apporte, c'est les
constructeurs, ce slicing est sans consequence.
D'accord, merci pour les éclaircissements, et pour bien
connaitre les historiques des normes !
> Je me demande pourquoi l'initialisation partielle des 'struct' > en C n'est pas syntaxiquement correcte en C++ et comment le > réaliser :
> #include <sys/time.h> > > int main (void) > { > struct timeval x = { .tv_usec = 2 }; > return x.tv_usec; > }
La raison est simple : cette syntaxe a été ajoutée dans C99, et C++ se base sur C90. Et personne ne s'en est occupé pour la porter dans C++0x. (Autant que je sache, en tout cas.)
Quant à la solution, je ne vois que de wrapper la struct dans une classe, avec un constructeur. Il y aura slicing si par la suite tu utilises la classe où une valeur de type timeval est attendue, mais si tout ce que la classe apporte, c'est les constructeurs, ce slicing est sans consequence.
D'accord, merci pour les éclaircissements, et pour bien connaitre les historiques des normes !
david
david
Marc Espie wrote:
In article <ikq9rm$2e5$, david wrote: >Bonjour, > >Je me demande pourquoi l'initialisation partielle des 'struct' >en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99). La norme du C++ date de 98...
<
>et comment le réaliser : la ? initialisation est feminin
Merci pour la lesson de français.
Tu ne peux pas. Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets. En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs et surcharge d'operateurs sont bien plus puissants...
Même si cela ne plait pas à tout le monde, cela peut quand même permettre de porter plus rapidement du code C réemployé dans du code C++.
Merci pour les informations,
david
Marc Espie <espie@lain.home> wrote:
In article <ikq9rm$2e5$1@news.laas.fr>, david <deyv@free.fr> wrote:
>Bonjour,
>
>Je me demande pourquoi l'initialisation partielle des 'struct'
>en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99).
La norme du C++ date de 98...
<
>et comment le réaliser :
la ?
initialisation est feminin
Merci pour la lesson de français.
Tu ne peux pas.
Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets.
En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs
et surcharge d'operateurs sont bien plus puissants...
Même si cela ne plait pas à tout le monde, cela peut quand même
permettre de porter plus rapidement du code C réemployé dans du
code C++.
In article <ikq9rm$2e5$, david wrote: >Bonjour, > >Je me demande pourquoi l'initialisation partielle des 'struct' >en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99). La norme du C++ date de 98...
<
>et comment le réaliser : la ? initialisation est feminin
Merci pour la lesson de français.
Tu ne peux pas. Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets. En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs et surcharge d'operateurs sont bien plus puissants...
Même si cela ne plait pas à tout le monde, cela peut quand même permettre de porter plus rapidement du code C réemployé dans du code C++.
Merci pour les informations,
david
Fabien LE LEZ
On Fri, 4 Mar 2011 10:18:02 +0000 (UTC), david :
Même si cela ne plait pas à tout le monde, cela peut quand même permettre de porter plus rapidement du code C réemployé dans du code C++.
Pour transformer du code C en C++, on se retrouve à quasiment tout réécrire. On n'est plus à quelques détails près. Si tu veux utiliser du code C, mieux vaut le laisser dans un .c, et définir une interface pour appeler ce code depuis du C++.
On Fri, 4 Mar 2011 10:18:02 +0000 (UTC), david <deyv@free.fr>:
Même si cela ne plait pas à tout le monde, cela peut quand même
permettre de porter plus rapidement du code C réemployé dans du
code C++.
Pour transformer du code C en C++, on se retrouve à quasiment tout
réécrire. On n'est plus à quelques détails près.
Si tu veux utiliser du code C, mieux vaut le laisser dans un .c, et
définir une interface pour appeler ce code depuis du C++.
Même si cela ne plait pas à tout le monde, cela peut quand même permettre de porter plus rapidement du code C réemployé dans du code C++.
Pour transformer du code C en C++, on se retrouve à quasiment tout réécrire. On n'est plus à quelques détails près. Si tu veux utiliser du code C, mieux vaut le laisser dans un .c, et définir une interface pour appeler ce code depuis du C++.
ld
On 4 mar, 10:28, (Marc Espie) wrote:
In article <ikq9rm$, david wrote: >Bonjour,
>Je me demande pourquoi l'initialisation partielle des 'struct' >en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99). La norme du C++ date de 98...
>et comment le r aliser :
la ? initialisation est feminin
Tu ne peux pas. Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets. En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeu rs et surcharge d'operateurs sont bien plus puissants...
plus puissant, moins puissant, impuissant, ... il n'y a pas de relation d'ordre entre les languages.
Les designed initializers permettent aussi de faire des choses sympatiques en C. Comme nommer les arguments d'une fonction lorsque ceux-ci on des types identiques, compatibles ou coercibles, ou leur assigner des valeures par defaut (comme C++). Ils seront donc les bienvenus en C++.
a+, laurent
On 4 mar, 10:28, es...@lain.home (Marc Espie) wrote:
In article <ikq9rm$2e...@news.laas.fr>, david <d...@free.fr> wrote:
>Bonjour,
>Je me demande pourquoi l'initialisation partielle des 'struct'
>en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99).
La norme du C++ date de 98...
>et comment le r aliser :
la ?
initialisation est feminin
Tu ne peux pas.
Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets.
En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeu rs
et surcharge d'operateurs sont bien plus puissants...
plus puissant, moins puissant, impuissant, ... il n'y a pas de
relation d'ordre entre les languages.
Les designed initializers permettent aussi de faire des choses
sympatiques en C. Comme nommer les arguments d'une fonction lorsque
ceux-ci on des types identiques, compatibles ou coercibles, ou leur
assigner des valeures par defaut (comme C++). Ils seront donc les
bienvenus en C++.
>Je me demande pourquoi l'initialisation partielle des 'struct' >en C n'est pas syntaxiquement correcte en C++
Ta syntaxe, c'est du C99 (norme ISO datant de 99). La norme du C++ date de 98...
>et comment le r aliser :
la ? initialisation est feminin
Tu ne peux pas. Met juste une affectation sur la ligne du dessous.
Cette construction est utile en C parce qu'on n'a pas d'objets. En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeu rs et surcharge d'operateurs sont bien plus puissants...
plus puissant, moins puissant, impuissant, ... il n'y a pas de relation d'ordre entre les languages.
Les designed initializers permettent aussi de faire des choses sympatiques en C. Comme nommer les arguments d'une fonction lorsque ceux-ci on des types identiques, compatibles ou coercibles, ou leur assigner des valeures par defaut (comme C++). Ils seront donc les bienvenus en C++.
a+, laurent
espie
In article , ld wrote:
Cette construction est utile en C parce qu'on n'a pas d'objets. En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs et surcharge d'operateurs sont bien plus puissants...
plus puissant, moins puissant, impuissant, ... il n'y a pas de relation d'ordre entre les languages.
Si, quand meme, meme si ca ne me surprend pas que tu penses le contraire.
Les designed initializers permettent aussi de faire des choses sympatiques en C. Comme nommer les arguments d'une fonction lorsque ceux-ci on des types identiques, compatibles ou coercibles, ou leur assigner des valeures par defaut (comme C++). Ils seront donc les bienvenus en C++.
Par exemple, tout ce qui est expression-template et manipulateurs permettent de faire la meme chose en C++ avec souvent une syntaxe encore plus sympathique.
In article <7cd07d0d-ab04-4ab4-83fa-e6ba8ccc6b75@a28g2000vbo.googlegroups.com>,
ld <laurent.deniau@gmail.com> wrote:
Cette construction est utile en C parce qu'on n'a pas d'objets.
En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs
et surcharge d'operateurs sont bien plus puissants...
plus puissant, moins puissant, impuissant, ... il n'y a pas de
relation d'ordre entre les languages.
Si, quand meme, meme si ca ne me surprend pas que tu penses le contraire.
Les designed initializers permettent aussi de faire des choses
sympatiques en C. Comme nommer les arguments d'une fonction lorsque
ceux-ci on des types identiques, compatibles ou coercibles, ou leur
assigner des valeures par defaut (comme C++). Ils seront donc les
bienvenus en C++.
Par exemple, tout ce qui est expression-template et manipulateurs permettent
de faire la meme chose en C++ avec souvent une syntaxe encore plus sympathique.
Cette construction est utile en C parce qu'on n'a pas d'objets. En C++ "non legacy", elle ne sert a peu pres a rien. Classes, constructeurs et surcharge d'operateurs sont bien plus puissants...
plus puissant, moins puissant, impuissant, ... il n'y a pas de relation d'ordre entre les languages.
Si, quand meme, meme si ca ne me surprend pas que tu penses le contraire.
Les designed initializers permettent aussi de faire des choses sympatiques en C. Comme nommer les arguments d'une fonction lorsque ceux-ci on des types identiques, compatibles ou coercibles, ou leur assigner des valeures par defaut (comme C++). Ils seront donc les bienvenus en C++.
Par exemple, tout ce qui est expression-template et manipulateurs permettent de faire la meme chose en C++ avec souvent une syntaxe encore plus sympathique.
ld
On 4 mar, 17:33, (Marc Espie) wrote:
In article .com>,
ld wrote: >> Cette construction est utile en C parce qu'on n'a pas d'objets. >> En C++ "non legacy", elle ne sert a peu pres a rien. Classes, construc teurs >> et surcharge d'operateurs sont bien plus puissants...
>plus puissant, moins puissant, impuissant, ... il n'y a pas de >relation d'ordre entre les languages.
Si, quand meme, meme si ca ne me surprend pas que tu penses le contraire.
>Les designed initializers permettent aussi de faire des choses >sympatiques en C. Comme nommer les arguments d'une fonction lorsque >ceux-ci on des types identiques, compatibles ou coercibles, ou leur >assigner des valeures par defaut (comme C++). Ils seront donc les >bienvenus en C++.
Par exemple, tout ce qui est expression-template et manipulateurs permett ent de faire la meme chose en C++ avec souvent une syntaxe encore plus sympat hique.
comment faire un call-by-name en C++ sans definir une classe by nom d'argument?
a+, laurent
On 4 mar, 17:33, es...@lain.home (Marc Espie) wrote:
In article <7cd07d0d-ab04-4ab4-83fa-e6ba8ccc6...@a28g2000vbo.googlegroups .com>,
ld <laurent.den...@gmail.com> wrote:
>> Cette construction est utile en C parce qu'on n'a pas d'objets.
>> En C++ "non legacy", elle ne sert a peu pres a rien. Classes, construc teurs
>> et surcharge d'operateurs sont bien plus puissants...
>plus puissant, moins puissant, impuissant, ... il n'y a pas de
>relation d'ordre entre les languages.
Si, quand meme, meme si ca ne me surprend pas que tu penses le contraire.
>Les designed initializers permettent aussi de faire des choses
>sympatiques en C. Comme nommer les arguments d'une fonction lorsque
>ceux-ci on des types identiques, compatibles ou coercibles, ou leur
>assigner des valeures par defaut (comme C++). Ils seront donc les
>bienvenus en C++.
Par exemple, tout ce qui est expression-template et manipulateurs permett ent
de faire la meme chose en C++ avec souvent une syntaxe encore plus sympat hique.
comment faire un call-by-name en C++ sans definir une classe by nom
d'argument?
ld wrote: >> Cette construction est utile en C parce qu'on n'a pas d'objets. >> En C++ "non legacy", elle ne sert a peu pres a rien. Classes, construc teurs >> et surcharge d'operateurs sont bien plus puissants...
>plus puissant, moins puissant, impuissant, ... il n'y a pas de >relation d'ordre entre les languages.
Si, quand meme, meme si ca ne me surprend pas que tu penses le contraire.
>Les designed initializers permettent aussi de faire des choses >sympatiques en C. Comme nommer les arguments d'une fonction lorsque >ceux-ci on des types identiques, compatibles ou coercibles, ou leur >assigner des valeures par defaut (comme C++). Ils seront donc les >bienvenus en C++.
Par exemple, tout ce qui est expression-template et manipulateurs permett ent de faire la meme chose en C++ avec souvent une syntaxe encore plus sympat hique.
comment faire un call-by-name en C++ sans definir une classe by nom d'argument?
a+, laurent
espie
In article , ld wrote:
On 4 mar, 17:33, (Marc Espie) wrote:
Par exemple, tout ce qui est expression-template et manipulateurs permettent de faire la meme chose en C++ avec souvent une syntaxe encore plus
sympathique.
comment faire un call-by-name en C++ sans definir une classe by nom d'argument?
Parce qu'en C, tu m'expliques comment tu fais des initialiseurs de champs sans definir la struct qui va avec...
In article <1feeec42-1afe-471a-a57e-a50d25952480@a17g2000yqn.googlegroups.com>,
ld <laurent.deniau@gmail.com> wrote:
On 4 mar, 17:33, es...@lain.home (Marc Espie) wrote:
Par exemple, tout ce qui est expression-template et manipulateurs permettent
de faire la meme chose en C++ avec souvent une syntaxe encore plus
sympathique.
comment faire un call-by-name en C++ sans definir une classe by nom
d'argument?
Parce qu'en C, tu m'expliques comment tu fais des initialiseurs de champs
sans definir la struct qui va avec...
Par exemple, tout ce qui est expression-template et manipulateurs permettent de faire la meme chose en C++ avec souvent une syntaxe encore plus
sympathique.
comment faire un call-by-name en C++ sans definir une classe by nom d'argument?
Parce qu'en C, tu m'expliques comment tu fais des initialiseurs de champs sans definir la struct qui va avec...
ld
On 3 avr, 15:15, (Marc Espie) wrote:
In article .com>,
ld wrote: >On 4 mar, 17:33, (Marc Espie) wrote: >> Par exemple, tout ce qui est expression-template et manipulateurs perm ettent >> de faire la meme chose en C++ avec souvent une syntaxe encore plus >sympathique.
>comment faire un call-by-name en C++ sans definir une classe by nom >d'argument?
Parce qu'en C, tu m'expliques comment tu fais des initialiseurs de champs sans definir la struct qui va avec...
Ok, voyons la quantite de code pour faire du call-by-name optionel en C
La fonciton a "wrapper" definie dans une bibliotheque externe (header):
double signal_sinusoidal(double a, double f, double p, double t);
Le wrapper pour avoir du call-by-name avec valeures par defaut (header, 11 lignes):
Et maintenant en C++ standard, on fait comment pour avoir la meme chose?? Je pense que c'est possible avec une bonne centaine de ligne et boot::mpl (en attendant les variadic templates).
a+, laurent
On 3 avr, 15:15, es...@lain.home (Marc Espie) wrote:
In article <1feeec42-1afe-471a-a57e-a50d25952...@a17g2000yqn.googlegroups .com>,
ld <laurent.den...@gmail.com> wrote:
>On 4 mar, 17:33, es...@lain.home (Marc Espie) wrote:
>> Par exemple, tout ce qui est expression-template et manipulateurs perm ettent
>> de faire la meme chose en C++ avec souvent une syntaxe encore plus
>sympathique.
>comment faire un call-by-name en C++ sans definir une classe by nom
>d'argument?
Parce qu'en C, tu m'expliques comment tu fais des initialiseurs de champs
sans definir la struct qui va avec...
Ok, voyons la quantite de code pour faire du call-by-name optionel en
C
La fonciton a "wrapper" definie dans une bibliotheque externe
(header):
double signal_sinusoidal(double a, double f, double p, double t);
Le wrapper pour avoir du call-by-name avec valeures par defaut
(header, 11 lignes):
Et maintenant en C++ standard, on fait comment pour avoir la meme
chose?? Je pense que c'est possible avec une bonne centaine de ligne
et boot::mpl (en attendant les variadic templates).
ld wrote: >On 4 mar, 17:33, (Marc Espie) wrote: >> Par exemple, tout ce qui est expression-template et manipulateurs perm ettent >> de faire la meme chose en C++ avec souvent une syntaxe encore plus >sympathique.
>comment faire un call-by-name en C++ sans definir une classe by nom >d'argument?
Parce qu'en C, tu m'expliques comment tu fais des initialiseurs de champs sans definir la struct qui va avec...
Ok, voyons la quantite de code pour faire du call-by-name optionel en C
La fonciton a "wrapper" definie dans une bibliotheque externe (header):
double signal_sinusoidal(double a, double f, double p, double t);
Le wrapper pour avoir du call-by-name avec valeures par defaut (header, 11 lignes):
Et maintenant en C++ standard, on fait comment pour avoir la meme chose?? Je pense que c'est possible avec une bonne centaine de ligne et boot::mpl (en attendant les variadic templates).