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

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
Gabriel Dos Reis
(Pascal J. Bourguignon) writes:

| 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;
| }
| }

Et ce n'est pas quelque chose que tu as en C?

Mais je suppose la question la plus importante est : si c'est un cas
*réel* (non construit just pour l'argumentation stérile), qu'elle est
la sémantique de f()? E.g. qu'est-ce que tu voulais qu'elle fasse ?

-- Gaby
Avatar
Gabriel Dos Reis
(Pascal J. Bourguignon) writes:

[...]

| Pour comparaison (et en tenant compte du fait que la notion C de
| pointeur n'existe pas en lisp, et donc qu'on ne risque pas de
| l'utiliser à mauvais escient comme en C++) :

Oh, maintenant nous devons troller avec le Lisp. Je croyais qu'on
discuter de C versus C++. La prochaine fois, changer de « Sujet: »
pour qu'on puisse facilement ignorer le contenu.

-- Gaby
Avatar
Mickaël Wolff
Pascal J. Bourguignon a écrit :

void f(int a){


[snip]
}



« Au contrefort des zygomatiques, bien heureux comme la chaise albinos. «

Mon correcteur orthographique est nul, il a pas compris que ma phrase
ne voulait rien dire ! ;)

Ce programme compile sans erreur (même avec -Werror),



Je penses que tu n'as pas compris le but de -Werror. Cette option
indique aux GCC qu'il faut considérer les Warning comme des erreurs. Si
tu veux que GCC soit plus pénible, il faut utiliser -Wall -pedantic -ansi.

et cependant
plante lamentablement. Je n'ai pas l'impression que la vérification
des types à la compilation aide en quoi que ce soit. 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.



Pas plus que la compilation ne permet de contrôler que ce qu'on
implémente n'a aucune logique, ou qu'on alloue la correctement sur le tas.

Au fait, ce n'est pas du C++, c'est du C ce que tu as montré :p

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
Mickaël Wolff
Pascal J. Bourguignon a écrit :

Exact, je voulais dire -Wall. Ça ne change rien au problème, -Wall ne
dit rien de plus sur ce programme.



Oui, puisque le programme est valide au sens du langage.


Compilé avec un compilateur C++. C'est donc du C++. Il serait temps
que tu te rendes compte qu'il n'y a pas d'amélioration au langage
juste en ajoutant deux signes plus au nom.



Je ne faisais que pointer le fait que tu présentes un code
principalement C comme un langage C++. Et ce n'est pas en remplaçant
deux caractères à gcc que tu en fais du C++ ;)


Sinon, tu peux toujours essayer d'inventer un langage qu'on pourrait
appeler C++-C, implémente un compilateur et vois ce qu'on peut faire
avec...



Je ne maîtrise pas suffisamment les deux langages pour me lancer dans
ce genre d'aventures.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
HB
Merci pour vos réponses, je ne sais toujours pas s'il faut ou pas apprendre
le C, certains d'entre vous sont même partie dans des explications qui me
dépassent pour l'instant !!



Je tiens à rassurer Fabien concernant le fourneau, même si le programme en
C++ est mal conçu, il n'y a aucun risque. Car dans le cas d'un fourneau qui
est commandé par un automate, le programme en C++ permettrait par exemple,
donner la température que doit atteindre le four d'un PC vers l'automate. Si
le four dépasse la température, il se mettrait en défaut (coupure de
sécurité). Mais, ce n'est pas le programme en C++ qui gère la mise en
défaut, mais le programme implanté dans l'automate (API), qui lui aura été
programmé avec un autre langage (Contact, liste.) de là on peut mettre
plusieurs sécurités (voyant qui s'allume a une certaine température, alarme
sonore si la température continue de monter, coupure de l'alimentation du
four si la température atteint une certaine température.) avec toutes les
sécurités je pense qu'il n'est pas possible que touts soit mal programmé.
Sinon soit la personne l'a fait exprès. Dans une nouvelle installation, un
automaticien intervient souvent plusieurs fois après la mise en service de l'installation
afin de corriger les imperfections du programme (des programmes). Mais
concernant la sécurité, toutes les sécurités sont testées avant la mise en
service définitif.

J'admets qu'on n'est jamais à l'abri d'un problème, si le programme de l'automate
bug et ne met pas le four en défaut. Il devrait toujours y avoir une coupure
d'urgence mécanique.



Concernant la programmation, je pense me diriger vers le C mais juste le
base, ensuite le C++, je ne sais pas si c'est le bon choix, on verra plus
tard.



Merci de votre aide

"Fabien LE LEZ" a écrit dans le message de news:

On Thu, 28 Aug 2008 19:22:08 +0200, Sylvain SF
:

certaines techniques avancées du C sont - comme dit ci-avant - des
mauvaises pratiques si l'on prétend faire du C++ (de puriste).
ces techinques sont rarement ce que l'on apprend, encore moins ce
que l'on retiens, lors de la découverte d'un langage.



Si tu dis "chaîne de caractères" à un programmeur C, même relativement
débutant, il pensera tout de suite "tableau de char", "malloc",
"strcat()", etc.
Ce qui fait de très mauvaises bases pour passer au C++.

Et je ne pense pas que la notion de chaîne de caractères soit une
notion avancée.

Dans la plupart des autres langages (Java, Javascript, PHP, etc.), une
chaîne de caractères est simplement un objet, qu'on peut retourner
d'une fonction, stocker, modifier, etc., aussi facilement qu'un
entier. Le C et l'assembleur font les choses différemment, de façon
beaucoup plus complexe, ce qui les met à part des autres langages.


le fait de parler d'info industriel m'autorise à penser que les
compétences attendues tiennent plus de la pertinence numérique
que la maitrise objet, pour un design propre ou pour la STL.



Détrompe-toi.

Si un jeu vidéo est mal programmé et plante, au pire, je dois
recommencer le niveau. Ça peut être gênant si ça arrive trop souvent,
mais bon, y'a pas de quoi fouetter un chat.

Si le programme de gestion d'un haut fourneau n'est pas parfait, et
qu'un bug lui fait faire des conneries, au mieux tu te retrouves avec
des pertes financières supérieures à ce qu'un programmeur gagnera dans
toute sa vie ; au pire, des vies humaines sont en jeu.

ne pas confondre & et && est un préalable.



Ça, même en PHP tu peux l'apprendre.



Avatar
pjb
Mickaël Wolff writes:

Pascal J. Bourguignon a écrit :

void f(int a){


[snip]
}



« Au contrefort des zygomatiques, bien heureux comme la chaise albinos. «

Mon correcteur orthographique est nul, il a pas compris que ma
phrase ne voulait rien dire ! ;)

Ce programme compile sans erreur (même avec -Werror),



Je penses que tu n'as pas compris le but de -Werror. Cette option
indique aux GCC qu'il faut considérer les Warning comme des
erreurs. Si tu veux que GCC soit plus pénible, il faut utiliser -Wall
-pedantic -ansi.



Exact, je voulais dire -Wall. Ça ne change rien au problème, -Wall ne
dit rien de plus sur ce programme.


et cependant
plante lamentablement. Je n'ai pas l'impression que la vérification
des types à la compilation aide en quoi que ce soit. 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.



Pas plus que la compilation ne permet de contrôler que ce qu'on
implémente n'a aucune logique, ou qu'on alloue la correctement sur le
tas.

Au fait, ce n'est pas du C++, c'est du C ce que tu as montré :p



Compilé avec un compilateur C++. C'est donc du C++. Il serait temps
que tu te rendes compte qu'il n'y a pas d'amélioration au langage
juste en ajoutant deux signes plus au nom.

Sinon, tu peux toujours essayer d'inventer un langage qu'on pourrait
appeler C++-C, implémente un compilateur et vois ce qu'on peut faire
avec...

--
__Pascal Bourguignon__ http://www.informatimago.com/

PLEASE NOTE: Some quantum physics theories suggest that when the
consumer is not directly observing this product, it may cease to
exist or will exist only in a vague and undetermined state.
Avatar
Sylvain SF
Fabien LE LEZ wrote on 29/08/2008 04:09:

Si tu dis "chaîne de caractères" à un programmeur C, même relativement
débutant, il pensera tout de suite "tableau de char", "malloc",
"strcat()", etc.



non, pointeur constant, eg: const char* msg = 'pouet';

Ce qui fait de très mauvaises bases pour passer au C++.



reste, soit, malloc et free qui ne foudrait pas retenir.

Et je ne pense pas que la notion de chaîne de caractères soit une
notion avancée.



tu ne penses pas "chaine de caractères" mais "manipulation de chaines".

Dans la plupart des autres langages (Java, Javascript, PHP, etc.), une
chaîne de caractères est simplement un objet, qu'on peut retourner
d'une fonction, stocker, modifier, etc., aussi facilement qu'un
entier.



non ?! ça alors.

Le C et l'assembleur font les choses différemment, de façon
beaucoup plus complexe, ce qui les met à part des autres langages.



s/complexe/rudimentaire/

Si un jeu vidéo est mal programmé et plante, au pire, je dois
recommencer le niveau. Ça peut être gênant si ça arrive trop souvent,
mais bon, y'a pas de quoi fouetter un chat.



c'est sur, je joue jamais.

chez Cryo le C++ ne servait qu'aux outils internes, un développeur
"sérieux" de jeux ne perd(ait) pas son temps avec des considérations
C++ mais peut être voulus-tu dire qu'il plantera ses routines à choses
de chaines non retournées comme un objet ?!

Si le programme de gestion d'un haut fourneau n'est pas parfait, et
qu'un bug lui fait faire des conneries, au mieux tu te retrouves avec
des pertes financières supérieures à ce qu'un programmeur gagnera dans
toute sa vie ; au pire, des vies humaines sont en jeu.



avec quoi cela peut-il avoir un rapport ?

Sylvain.
Avatar
pjb
Mickaël Wolff writes:

Pascal J. Bourguignon a écrit :

Exact, je voulais dire -Wall. Ça ne change rien au problème, -Wall ne
dit rien de plus sur ce programme.



Oui, puisque le programme est valide au sens du langage.


Compilé avec un compilateur C++. C'est donc du C++. Il serait temps
que tu te rendes compte qu'il n'y a pas d'amélioration au langage
juste en ajoutant deux signes plus au nom.



Je ne faisais que pointer le fait que tu présentes un code
principalement C comme un langage C++. Et ce n'est pas en remplaçant
deux caractères à gcc que tu en fais du C++ ;)



Si justement. Si on ne voulait pas que j'écrive ce code C++, il ne
fallait pas l'inclure dans C++.


Sinon, tu peux toujours essayer d'inventer un langage qu'on pourrait
appeler C++-C, implémente un compilateur et vois ce qu'on peut faire
avec...



Je ne maîtrise pas suffisamment les deux langages pour me lancer
dans ce genre d'aventures.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org



--
__Pascal Bourguignon__ http://www.informatimago.com/
Until real software engineering is developed, the next best practice
is to develop with a dynamic system that has extreme late binding in
all aspects. The first system to really do this in an important way
is Lisp. -- Alan Kay
Avatar
Gabriel Dos Reis
(Pascal J. Bourguignon) writes:

| Mickaël Wolff writes:
|
| > Pascal J. Bourguignon a écrit :
| >
| >> void f(int a){
| > [snip]
| >> }
| >
| > « Au contrefort des zygomatiques, bien heureux comme la chaise albinos. «
| >
| > Mon correcteur orthographique est nul, il a pas compris que ma
| > phrase ne voulait rien dire ! ;)

[...]

| Compilé avec un compilateur C++. C'est donc du C++. Il serait temps
| que tu te rendes compte qu'il n'y a pas d'amélioration au langage
| juste en ajoutant deux signes plus au nom.

Il reste une question fondamentale à laquelle tu as soigneusement
éviter de considérer : qu'est-ce que tu voulais exprimer dans f() ?

-- Gaby
Avatar
Gabriel Dos Reis
(Pascal J. Bourguignon) writes:


[...]

| Si justement. Si on ne voulait pas que j'écrive ce code C++, il ne
| fallait pas l'inclure dans C++.

???

-- Gaby