OVH Cloud OVH Cloud

Les avantages respectifs de C et du C++

59 réponses
Avatar
leo.hal
Bonjour,

Comme j'h=E9site entre apprendre le C et apprendre le C++ , je cherche a
peser le pour et le contre; d'o=F9 ma question :
Quels sont les avantages du C et du C++ ?

Merci

10 réponses

2 3 4 5 6
Avatar
James Kanze
Jean-Marc Bourguet wrote:
Pascal Bourguignon writes:

Mais je maintiens.

int gcd(int x,int y){
if(x==y){
return(x);
}else if(x<y){
return(gcd(x,y-x));
}else{
return(gcd(x-y,y));
}
}

C'est-y du C ou du C++?


C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et
dont la syntaxe presente une similarite douteuse avec celle du C et du C+ +.
Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.


Au moins qu'on n'écrive quelque chose du genre :

template< int cond, unsigned int X, unsigned int Y >
struct GCDHelper ;

template< unsigned int X, unsigned int Y >
struct GCD
{
static unsigned int const value
= GCDHelper< X < Y ? -1 : X == Y ? 0 : 1, X, Y >::val ue
;
} ;

template< unsigned int X, unsigned int Y >
struct GCDHelper< -1, X, Y >
{
static unsigned int const value = GCD< X, Y-X >::value ;
} ;

template< unsigned int X, unsigned int Y >
struct GCDHelper< 0, X, Y >
{
static unsigned int const value = X ;
} ;

template< unsigned int X, unsigned int Y >
struct GCDHelper< 1, X, Y >
{
static unsigned int const value = GCD< X-Y, Y >::value ;
} ;

de façon à pouvoir écrire plus tard :

double array[ GCD< 15, 20 >::value ] ;

Il y a des cas en C++ où on se sert de la recursivité, même si
elle ne semble pas l'agorithme le mieux adapté.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Jean-Marc Bourguet
"James Kanze" writes:

Jean-Marc Bourguet wrote:
Pascal Bourguignon writes:

Mais je maintiens.

int gcd(int x,int y){
if(x==y){
return(x);
}else if(x<y){
return(gcd(x,y-x));
}else{
return(gcd(x-y,y));
}
}

C'est-y du C ou du C++?


C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et
dont la syntaxe presente une similarite douteuse avec celle du C et du C++.
Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.


Au moins qu'on n'écrive quelque chose du genre :

template< int cond, unsigned int X, unsigned int Y >
struct GCDHelper ;

template< unsigned int X, unsigned int Y >
struct GCD
{
static unsigned int const value
= GCDHelper< X < Y ? -1 : X == Y ? 0 : 1, X, Y >::value
;
} ;

template< unsigned int X, unsigned int Y >
struct GCDHelper< -1, X, Y >
{
static unsigned int const value = GCD< X, Y-X >::value ;
} ;

template< unsigned int X, unsigned int Y >
struct GCDHelper< 0, X, Y >
{
static unsigned int const value = X ;
} ;

template< unsigned int X, unsigned int Y >
struct GCDHelper< 1, X, Y >
{
static unsigned int const value = GCD< X-Y, Y >::value ;
} ;

de façon à pouvoir écrire plus tard :

double array[ GCD< 15, 20 >::value ] ;

Il y a des cas en C++ où on se sert de la recursivité, même si
elle ne semble pas l'agorithme le mieux adapté.


Exact. Mais la confusion avec le C est alors impossible :-)

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Fabien LE LEZ
On Mon, 22 Jan 2007 09:20:41 +0100, "Antoine Leca" :

Euh ? Basic ressemble tellement for à C et autres langages du même acabit
(Pascal, Fortran, Cobol, etc.) qu'on les a classés dans le même « groupe »


Je parlais uniquement de la syntaxe (cf ci-dessous l'exemple que
j'avais donné). C et C++ ont la même syntaxe de base, mais les
méthodes de programmation sont totalement différentes.



total= 0;
for (i=0; i<42; ++i)
{
if (i % 3 == 2)
{
total+= i*i;
}
}

Avatar
Fabien LE LEZ
On 22 Jan 2007 04:19:31 -0800, "James Kanze" :

C'est vrai qu'en C++, j'écrirais la fonction plutôt comme :
[...]


Je préfère indenter le deuxième "?:", pour bien marquer qu'il ne se
réfère pas à la première condition :

{
return x == y
? x
: x < y
? gcd( x, y - x )
: gcd( x - y, y );

Avatar
Fabien LE LEZ
On 22 Jan 2007 04:44:01 -0800, "James Kanze" :

Il y a des cas en C++ où on se sert de la recursivité,


Oui, mais ce n'est pas la même récursivité.
En fait, ce n'est même pas le même langage : le système de templates
est, il me semble, un langage complet (au sens de Turing) à
l'intérieur du langage C++. Langage qui est exécuté au moment de la
compilation.
(Cela n'en fait-il pas un langage interprété, d'ailleurs ?)

Avatar
Fabien LE LEZ
On Mon, 22 Jan 2007 08:31:47 +0000 (UTC), Marc Boyer :

OUi, j'avais contacté les gens de chez pearson education,
qui sont le contact français d'Addison Wesley, mais
après échange d'un seul mail, c'était resté sans réponse.


Depuis quand les Français ont-ils un usage sérieux du mail ?
Quand je veux traiter quelque chose d'un peu sérieux avec une
entreprise en France, je prend mon téléphone.

Avatar
Marc Boyer
Le 22-01-2007, Fabien LE LEZ a écrit :
On Mon, 22 Jan 2007 08:31:47 +0000 (UTC), Marc Boyer :

OUi, j'avais contacté les gens de chez pearson education,
qui sont le contact français d'Addison Wesley, mais
après échange d'un seul mail, c'était resté sans réponse.


Depuis quand les Français ont-ils un usage sérieux du mail ?
Quand je veux traiter quelque chose d'un peu sérieux avec une
entreprise en France, je prend mon téléphone.


J'avoue que je ne suis pas tellement téléphone au boulot,
seulement quand il y a besoin fort d'interraction.
Enfin juste pour dire que traduire ce bouquin etait pas
dans leurs priorités en 2005.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)


Avatar
espie
In article ,
Jean-Marc Bourguet wrote:
Pascal Bourguignon writes:

Mais je maintiens.

int gcd(int x,int y){
if(x==y){
return(x);
}else if(x<y){
return(gcd(x,y-x));
}else{
return(gcd(x-y,y));
}
}

C'est-y du C ou du C++?


C'est ecrit dans un langage fonctionnel que je n'arrive pas a identifie et
dont la syntaxe presente une similarite douteuse avec celle du C et du C++.
Ni en C ni en C++ on n'utilise la recursivite dans ce contexte.


Pas d'accord.

Les vrais bons programmeurs C/C++ ont quelques notions d'informatique
theorique, savent reconnaitre la recursion terminale, et savent que leur
compilateur favori, qu'ils ont choisi avec amour, sait egalement reconnaitre
la recursion terminale. Et donc ils se concentrent sur des *vraies*
ameliorations du code en question, qui n'est franchement pas terrible et
rarement utilise pour faire des calculs de pgcd decents. ;-)


Avatar
Jean-Marc Bourguet
(Marc Espie) writes:

Les vrais bons programmeurs C/C++ ont quelques notions d'informatique
theorique, savent reconnaitre la recursion terminale, et savent que leur
compilateur favori, qu'ils ont choisi avec amour, sait egalement reconnaitre
la recursion terminale.


Je n'ai pas choisi *les* compilateurs que j'utilise au boulot. Il y a une
equipe pour cela (qui fixe aussi les patchs et les versions de l'OS et les
options a utiliser pour le compilateur). Et je suis loin d'etre sur que
tous reconnaisse la recursivite terminale. En fait, je ne connais la
reponse que pour un... et encore, j'ai pas verifie pour la version exacte
que nous employons (pour diverses raisons, nous avons toujours quelques
version de retard sur le "bleeding edge").

Et donc ils se concentrent sur des *vraies* ameliorations du code en
question, qui n'est franchement pas terrible et rarement utilise pour
faire des calculs de pgcd decents. ;-)


Nous sommes d'accord sur cela :-) Mais ce n'etait pas le fond de la question.

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
James Kanze
Fabien LE LEZ wrote:
On 22 Jan 2007 04:19:31 -0800, "James Kanze" :

C'est vrai qu'en C++, j'écrirais la fonction plutôt comme :
[...]


Je préfère indenter le deuxième "?:", pour bien marquer qu'il ne se
réfère pas à la première condition :

{
return x == y
? x
: x < y
? gcd( x, y - x )
: gcd( x - y, y );


Est-ce que tu indentes aussi les if/else :

if ( x == y )
result = x ;
else
if ( x < y )
result = gcd( x, y - x ) ;
else
result = gcd( x - y, y ) ;

? En fin de compte, c'est la même chose. (Mais j'avoue que je ne
m'en suis rendu compte que quand John Potter l'a signalé.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


2 3 4 5 6