srand et rand & fonction c++
Bonjour,
Dans la FAQ de C, il utilise srand et rand pour faire des nombres aléatoires avec la bibliothèque stdlib.h. Est-ce que cette bibliothèque est disponible en C++ ? Porte t-elle le même nom ?
Sur ce forum on voi souvent des débutants comme moi qui mélange des fonctions de C++ et de C. Comment savoir si une fonction appartient au C++ ou au C ou au 2 ?
Merci d'avance...
Re: srand et rand & fonction c++
Bonjour,
Citation:
Envoyé par casafa
Est-ce que cette bibliothèque est disponible en C++ ? Porte t-elle le même nom ?
Oui, la stdlib est disponible également en C++ et elle s'utilise de la même façon. Elle a été programmée dans cette optique. Et elle porte le même nom.
Citation:
Envoyé par casafa
Comment savoir si une fonction appartient au C++ ou au C ou au 2 ?
Comme tu as dû t'en rendre compte, le C et le C++ sont très proches. En fait, le c++ est du c, avec la couche objet en +. Donc toute fonction c peut être utilisée par un compilateur c++. En revanche, tout ce qui utilise la couche objet en c++ ne pourra pas être compilé par un compilateur c.
Hope it helps.
Re: srand et rand & fonction c++
Citation:
Envoyé par casafa
Dans la FAQ de C, il utilise srand et rand pour faire des nombres aléatoires avec la bibliothèque stdlib.h.
stdlib.h n'est pas une bibliothèque, c'est un entête déclarant une partie des fonctions de la bibliothèque standard C.
Citation:
Est-ce que cette bibliothèque est disponible en C++ ? Porte t-elle le même nom ?
Toute la bibliothèque standard du C est disponible en C++. On peut inclure deux sortes d'entête pour en avoir les déclarations:- xxx.h: les déclarations sont à la fois présentes dans le namespace global et dans le namespace std
- cxxx: les déclarations sont uniquement présentes dans le namespace std
L'utilisation des noms cxxx peut sembler plus propre en C++, mais il y a au moins deux problèmes:- pour le faire de manière réellement conforme, il faut maîtriser la bibliothèque C, ce que ne font pas certains fournisseurs de compilateur C++ et donc les formes cxxx ne sont pas strictement conformes,
- les entêtes xxx.h fournissent souvent plus de choses que ce qui est demandé par la norme C (en particulier POSIX et donc les Unix y ajoutent des déclarations -- c'est difficile de leur jeter la pierre, une partie de ces déclarations s'y trouvaient déjà avant que le comité de normalisation du C ne commence ses travaux -- et il me semble que c'est aussi le cas pour Windows mais comme je ne l'utilise pas je peux me tromper), généralement on désire ces déclarations supplémentaires et je me suis déjà retrouvé dans l'impossibilité de les avoir avec les formes cxxx alors que le contrôle de la disponibilité de ces déclarations pour les formes xxx.h est bien connu.
Re: srand et rand & fonction c++
Citation:
Envoyé par Jean-Marc.Bourguet
et il me semble que c'est aussi le cas pour Windows mais comme je ne l'utilise pas je peux me tromper)
C'est le cas: Les ajouts de Microsoft à la "C Run-time Library" sont déclarés dans les en-têtes standard.
Les fonctions de l'API Windows par contre, sont déclarées dans les headers windows (commctrl.h, windows.h, etc).
Donc, les headers C++ sont supposés être plus "standard" que les headers C, ce qui supprime d'emblée ces extensions, mais en plus ne sont pas strictement conformes, ce qui revient à cumuler les inconvénients des deux?
Re: srand et rand & fonction c++
Citation:
Envoyé par Médinoc
Donc, les headers C++ sont supposés être plus "standard" que les headers C, ce qui supprime d'emblée ces extensions, mais en plus ne sont pas strictement conformes, ce qui revient à cumuler les inconvénients des deux?
Je me suis peut-être mal exprimé. Il y a deux problèmes différents sans liens entre eux avec les entêtes chhh:- ils mettent toutes les déclarations de la bibliothèque standard C dans le namespace std et uniquement là dedans, ce qui est en pratique difficile si pas impossible à faire par quelqu'un qui ne fournit que la partie C++ et pas la partie C -- exemple STL port, la bibliothèque de g++,
- les entêtes du C ont souvent des extensions et -- dans le cas de Unix au moins -- un mécanisme bien connu pour contrôler la présence ou non de ces extensions. Les version cxxx n'ont parfois pas ces extensions ni aucun moyen de les ajouter. Hors dans le genre de programmes que je fais ces extensions sont plus souvent utiles que nuisibles...
Note: je n'ai pas réexaminé en détail l'état courant des choses: cela fait longtemps que j'utilise systématiquement les formes xxx.h et les version cxxx se comportent peut-être mieux maintenant.
Re: srand et rand & fonction c++
Citation:
Envoyé par Médinoc
Donc, les headers C++ sont supposés être plus "standard" que les headers C, ce qui supprime d'emblée ces extensions, mais en plus ne sont pas strictement conformes, ce qui revient à cumuler les inconvénients des deux?
La norme C++98 contient les entêtes de la bibliothèque standard de la norme C90 par référence avec un nombre de modifications. La plus importante est la coexistence des entêtes <cabc> et <abc.h>. La seule différence est que <cabc> déclare ses fonctions dans le namespace std.
Les autres modifications sont des détails nécessaire pour garantir la portabilité d'un programme conforme. Par exemple assert peut être un macro selon C90 mais doit en être un selon C++98. Cette décision impliques qu'on doit utiliser "assert" et non "std::assert".
Un problème avec les versions <cabc> est qu'il n'est pas sûr que les extensions qui ont été ajoutées aux versions <abc.h> y soient disponibles.