OVH Cloud OVH Cloud

Début en C et C++

106 réponses
Avatar
HB
Bonjour,


En début d'année, je vais suivre une formation dans l'automatisme et
l'informatique Industriel.


cependant je ne connais rien en langage de programmation. je suis à la
recherche de site voir des livres, afin de prendre de l'avance.

Question au passage, pour apprendre le C++ j'entend différente sons de
cloche, certain dissent qu'il faut apprendre le C au parvant, d'autre le
conseil fortement enfin d'autre que cela n'est absolument pas nécessaire.

Donc faut il l'apprendre ?

Merci de vos réponses

10 réponses

Avatar
James Kanze
On Aug 28, 4:17 pm, (Pascal J. Bourguignon)
wrote:

Donc la première chose à apprendre, c'est à ne pas faire de faute
d'orthographe ou de grammaire.



Besides a mathematical inclination, an exceptionally
good mastery of one's native tongue is the most vital
asset of a competent programmer.
-- E. W. Dijkstra

Quand j'étais au lycée, mon prof d'anglais insistait
toujours que « good writing is clear and concise ». Ça vaut
aussi quand ce qu'on écrit est un programme. (Et
l'orthographie et la grammaire son essentielles pour la
clarité.)

--
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
James Kanze
On Aug 29, 12:47 am, (Pascal J. Bourguignon)
wrote:
Mickaël Wolff writes:
> Pascal J. Bourguignon a écrit :



>> D'un autre côté, ce ne sont pas les langages que je conseillerais à
>> des débutants en informatique, mais plutôt lisp (ou scheme), ou
>> python, ou forth.



> Je ne suis pas d'accord. Les langages interprétés introduisent de s



Qui a parlé d'interprète? Là n'est pas la question. Ce qui compte
c'est d'avoir un environnement interactif et réactif, une boucle de
lecture, évaluation et affichage (= Read Eval Print Loop = REPL).



C'est un des aspects importants. Un autre, c'est d'exiger un
minimum de « magique » autour. (Fonction main, etc.)

Quand il s'agit d'apprendre la « programmation ». Tôt ou tard,
il faut bien s'adresser aussi aux questions de la génie
informatique. Avec les conceptions de compilation séparée,
travail en équipe, etc. Le posteur initial a parlé de
l'automatisme, ce qui laisse penser que la fiabilité pourrait
être importante ; à ce moment-là, le typage statique (et très
strict) s'impose, par exemple. (Et donc, le Lisp est à exclure.)
Mais on ne peut pas tout apprendre d'un coup.

--
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
LMC
"James Kanze" a écrit dans le message de news:

On Aug 28, 4:17 pm, (Pascal J. Bourguignon)
wrote:

Donc la première chose à apprendre, c'est à ne pas faire de faute
d'orthographe ou de grammaire.



Besides a mathematical inclination, an exceptionally
good mastery of one's native tongue is the most vital
asset of a competent programmer.
-- E. W. Dijkstra

Quand j'étais au lycée, mon prof d'anglais insistait
toujours que « good writing is clear and concise ». Ça vaut
aussi quand ce qu'on écrit est un programme. (Et
l'orthographie et la grammaire son essentielles pour la
==> sont essentielles pour la clarté.
clarité.)

--
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
LMC
"James Kanze" a écrit dans le message de news:

On Aug 28, 4:17 pm, (Pascal J. Bourguignon)
wrote:

Donc la première chose à apprendre, c'est à ne pas faire de faute
d'orthographe ou de grammaire.



Besides a mathematical inclination, an exceptionally
good mastery of one's native tongue is the most vital
asset of a competent programmer.
-- E. W. Dijkstra

Quand j'étais au lycée, mon prof d'anglais insistait
toujours que « good writing is clear and concise ». Ça vaut
aussi quand ce qu'on écrit est un programme. (Et
l'orthographie et la grammaire son essentielles pour la ==> orthographe et
non orthographie
clarité.)

--
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
James Kanze
On Aug 29, 2:26 pm, (Pascal J. Bourguignon)
wrote:
Le C est déjà un raccourci, le mieux serait de commencer par
l'assembleur. ;-)



L'assembleur est déjà un raccourcie ; le mieux serait de
commencer par les codes binaires :-). Et pour bien programmer au
niveau applicatif dans beaucoup de domaines, il faut l'oublier,
même si on le connaît, parce que c'est bien plusieurs niveaux
d'abstraction plus bas.

Bon, mais serrieusement, concernant le C++, le problème c'est
que c'est un langage qui n'est pas fini.



C'est, il me semble, un caractèristique essentiel de tout
langage de programmation utilisable.

Pour pouvoir l'utiliser en tant que C++ comme l'entendent ceux qui
préconisent son apprentissage sans passer par C, il faut avoir
implémenté une sacré bibliothèque de mécanismes de base (comme les
soit-disant "Smart Pointer"), et d'objets, et il faut bien sur
s'interdir d'utiliser tous les opérateurs du C problématiques. En
clair, il faut avoir implémenté au dessus de C++ un nouveau langage e t
n'utiliser que celui-ci.



Je ne sais pas d'où tu tires ça. Pour utiliser C++ comme langage
de base, il suffit de la bibliothèque standard et le collecteur
de Boehm, Or, une installation de C++ sans le premier n'est pas
une installation de C++, et l'autre peut (et doit) faire partie
de l'installation aussi (et n'est nécessaire que si on fait
soi-même de l'allocation dynamique -- certainement pas le cas
dans les premiers programmes qu'on écrit).

C'est certain que dans le contexte d'un cours, on pourrait
vouloir offrir les bibliothèques mieux conçues que la
bibliothèque standard (ne serait-ce que pour éviter les
confusions entre size_t et int, et les problèmes potentiels
quand on les melange). Mais ce n'est pas quelque chose
d'essentiel.

Or pour implémenter ce nouveau langage, il faut savoir programmer en
C, car on ne peut utiliser que C pour implementer un stl::vector.



Mais on ne doit pas implémenter std::vector. Il est là.

--
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
James Kanze
On Aug 29, 3:01 pm, Fabien LE LEZ wrote:
On Fri, 29 Aug 2008 14:26:30 +0200, (Pascal J.
Bourguignon):



>Or pour implémenter ce nouveau langage, il faut savoir programmer en
>C, car on ne peut utiliser que C pour implementer un stl::vector.



Il ne faut pas implémenter std::vector<> : c'est déjà fait.



Effectivement, les programmeurs responsables de VC++, g++ et
consorts, doivent avoir un très bon niveau en C++ et en C.



Du C, je n'en suis pas si sûr. Avant la norme, j'ai dû
implémenter mon propre std::vector, et il n'y avait pas
tellement de C dedans.

--
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
James Kanze
On Aug 30, 2:47 pm, (Pascal J. Bourguignon)
wrote:
Gabriel Dos Reis writes:



> | Il y a plein d'expressions en C++ qui sont catastrophique pour le
> | programme.



> Plus concrêtement ?



Par exemple:



void f(int a){
int* p=&a;
for(int i=(-16);i<16;i++){
p[i]=1;
}
}



int main(void){
try{
f(1);
}catch(...){
return(1);
}
return(0);
}



/*
-*- mode: compilation; default-directory: "/tmp/" -*-
Compilation started at Sat Aug 30 14:38:03



g++ -o a a.c++ -Werror && ./a ; echo status = $?
/bin/bash: line 1: 10416 Segmentation fault ./a
status = 139



Compilation finished at Sat Aug 30 14:38:03
*/



Ce programme compile sans erreur (même avec -Werror), et cependant
plante lamentablement.



Compatibilité C oblige. En C++, la risque (pour le débuttant)
est moindre, parce qu'il n'aurait pas appris l'opérateur &.
(D'ailleurs, même en C, ce n'est pas un sujet qu'on aborde dans
les première leçons.)

Je n'ai pas l'impression que la vérification des types à la
compilation aide en quoi que ce soit.



Pour des petits essais d'école, c'est d'une utilité limitée.
Pour de grandes applications, c'est essentielle.

Le compilateur aurait surement mieux faire de moins vérifier
ce que JE tape, et de plus prendre soin de générer LUI-MÊME du
code qui fonctionne.



Ne soit pas ridicule. Il y a des limites à ce qu'on peut faire
avec l'analyse statique. Ce genre de code *doit* provoquer un
core dump ; le problème (s'il y en a), c'est qu'en C ou en C++,
il n'est pas garanti d'en provoquer un tout de suite.

[...]
Ici, même une erreur à l'exécution n'est pas catastrophique
car le programme peut l'attraper et la gérer.



Ce qui est rarement une bonne idée s'il s'agit d'une erreur de
programmation.

--
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
pjb
James Kanze writes:

Bon, mais serrieusement, concernant le C++, le problème c'est
que c'est un langage qui n'est pas fini.



C'est, il me semble, un caractèristique essentiel de tout
langage de programmation utilisable.



Non, un important caractère est que le langage soit extensible. Pas
qu'il faille commencer par écrire 20,000 lignes de code pour pouvoir
l'utiliser.

--
__Pascal_Bourguignon__ _ Software patents are endangering
() ASCII ribbon against html email (o_ the computer industry all around
/ 1962:DO20I=1.100 // the world http://lpf.ai.mit.edu/
2001:my($f)=`fortune`; V_/ http://petition.eurolinux.org/
Avatar
pjb
James Kanze writes:

Compatibilité C oblige. En C++, la risque (pour le débuttant)
est moindre, parce qu'il n'aurait pas appris l'opérateur &.



Bien sur que si. Pour définir une "reférence", ou pour faire un ET
binaire.


(D'ailleurs, même en C, ce n'est pas un sujet qu'on aborde dans
les première leçons.)

Je n'ai pas l'impression que la vérification des types à la
compilation aide en quoi que ce soit.



Pour des petits essais d'école, c'est d'une utilité limitée.
Pour de grandes applications, c'est essentielle.



La preuve que non. Si sur un programme de trois lignes ce n'est pas
efficace, comment peut il l'être sur un programme de 200,000 lignes?


Le compilateur aurait surement mieux faire de moins vérifier
ce que JE tape, et de plus prendre soin de générer LUI-MÊME du
code qui fonctionne.



Ne soit pas ridicule. Il y a des limites à ce qu'on peut faire
avec l'analyse statique. Ce genre de code *doit* provoquer un
core dump ; le problème (s'il y en a), c'est qu'en C ou en C++,
il n'est pas garanti d'en provoquer un tout de suite.



En effet il y a des limites. Et ces limites sont si proches de zero
dans le cas de langages comme C ou C++, qu'il serait préférable qu'ils
n'agravent pas leur cas avec des problèmes "statiques" supplémentaires.


[...]
Ici, même une erreur à l'exécution n'est pas catastrophique
car le programme peut l'attraper et la gérer.



Ce qui est rarement une bonne idée s'il s'agit d'une erreur de
programmation.



Ce qui est essentiel dans des systèmes critiques.


--
__Pascal Bourguignon__ http://www.informatimago.com/
You never feed me.
Perhaps I'll sleep on your face.
That will sure show you.
Avatar
Fabien LE LEZ
On Sun, 31 Aug 2008 14:17:28 +0200, (Pascal J.
Bourguignon):

Pas
qu'il faille commencer par écrire 20,000 lignes de code pour pouvoir
l'utiliser.



As-tu déjà essayé d'écrire un programme en C++ ?
J'en doute de plus en plus.