OVH Cloud OVH Cloud

iostream obsolete ?

17 réponses
Avatar
Leo
Bonjour,

lorsque jecris :

#include <iostream>

int main(){
std::cout<<"Hello, World";
}


VC++ (2005) me dit que c'est obsol=E8te, mais je n'ai lu nul part que =E7a
l'=E9tait.

Si vous pouviez eclairer ma lanterne.

Merci.

10 réponses

1 2
Avatar
Sylvain Togni
Leo wrote:

#include <iostream>

int main(){
std::cout<<"Hello, World";
}


VC++ (2005) me dit que c'est obsolète, mais je n'ai lu nul part que ça
l'était.


Si c'est vraiment le cas, c'est obsolète aux yeux de Microsoft,
pas aux yeux de la norme.

Microsoft a tendance à déclarer obsolète un peu trop facilement
des choses standards et à conseiller de les remplacer par des
choses non portables.

--
Sylvain Togni

Avatar
Arnaud Debaene
"Leo" a écrit dans le message de news:

Bonjour,

lorsque jecris :

#include <iostream>

int main(){
std::cout<<"Hello, World";
}


Pas chez moi (VS2005 SP1).

Ca compiles très bien avec "cl /c /EHsc toto.cpp".
Tu utilises quoi comme options de compilaton?

Arnaud

Avatar
Radamanthe
Leo wrote:
Bonjour,

lorsque jecris :

#include <iostream>

int main(){
std::cout<<"Hello, World";
}


VC++ (2005) me dit que c'est obsolète,


Amusant, mais pas très étonnant.

mais je n'ai lu nul part que ça
l'était.


VC++ == Microsoft, donc seul M$ te dira que c'est obsolète, seulement M$
n'est pas une norme. La question est de savoir en qui tu as le plus
confiance.

Ils ont sans doute des fonctions dans leur API pour faire la même chose
et ils trouvent ça tellement mieux que la STL de C++ (ça n'engage qu'eux
bien-sûr) qu'ils ont décidé d'en informer le programmeur quand il active
toutes les alertes. Mais ce n'est plus du C++, c'est du Windows
(obsolète ?).

Si vous pouviez eclairer ma lanterne.


C'est de la propagande M$, ça fait 25 ans que ça dure. Il faut toujours
penser à leur intérêts, Y COMPRIS dans leur documents techniques, Y
COMPRIS dans les messages de leur compilateur et même s'il est supposé
conforme à la norme. Est-il encore utile de préciser que Microsoft est
une entreprise à but hautement lucratif et que leur statégie en ce sens
est d'imposer leur monopole par tous les moyens possibles (et légaux
quand il n'y a pas encore de loi pour leur mettre la fessée) ?




--
R.N.

Avatar
Sylvain
Leo wrote on 19/02/2007 12:20:
Bonjour,

lorsque jecris :

#include <iostream>

int main(){
std::cout<<"Hello, World";
}


VC++ (2005) me dit


quelle version exactement ?

que c'est obsolète, mais je n'ai lu nul part que ça
l'était.


qu'est ce qu'est "c'" dans "c'est obsolète" -- je n'imagine pas que
Studio ait indiqué "c'est obsolète" tout court; il indique plus surement
un numéro de ligne, une instruction, ...

vous a-t-il indiqué que *int* main serait obso. sur un système 64 bits?
que "std::" est implicite pour un projet définissant un "using std" ?
que placer une virgule après "Hello" est obsolète ?

Si vous pouviez eclairer ma lanterne.


pour ma part, VC 2005 Pro, c'est à dire:

Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)

m'indique juste:

1>------ Build started: Project: console, Configuration: Debug Win32 ------
1>Compiling...
1>console.cpp
1>Linking...
1>Embedding manifest...
1>Build log was saved at "file://z:devprjconsoleDebugBuildLog.htm"
1>console - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped =========
avec un warning level de 4 ("/W4") soit le plus haut niveau.

sans connaissance du contexte et des caractéristiques de votre projet,
nulle réponse est possible.

Sylvain.

Avatar
Sylvain
Radamanthe wrote on 19/02/2007 20:55:

C'est de la propagande M$, [...]


et votre réponse de la propagande anti-M$ ?
un partout, la balle au centre, et après ???

Est-il encore utile de préciser que Microsoft est [...]


une entreprise qui vend (très cher!!!) un outil utilisé par de très
nombreux développeurs ? jeter l'anathème "pas étonnant, bien fait
puisque vous êtes complice, ..." n'apporte pas grand chose au débat.

Sylvain.

Avatar
Loïc Joly
Microsoft a tendance à déclarer obsolète un peu trop facilement
des choses standards et à conseiller de les remplacer par des
choses non portables.


Il y a effectivement quelques points qui ont été abusivement déclarés
obsolètes par Microsoft. <iostream> n'est fait pas partie à ma connaissance.

--
Loïc

Avatar
Radamanthe
Sylvain wrote:
Radamanthe wrote on 19/02/2007 20:55:

C'est de la propagande M$, [...]


et votre réponse de la propagande anti-M$ ?


Plutôt de l'information éculée dont l'op ne semblait pas avoir
pleinement conscience. Il faut dire que quand on appréhende un univers
aussi rigoureux que celui de la programmation, on ne s'attend pas trop à
ce que les documentations et outils soit pollués par de la propagande.
Certains mettent des années avant d'en faire le triste constat
lorsqu'ils daignent enfin sortir un tant soit peu de l'univers dans
lequel ils se cantonnaient jusque-là.

Je n'inscite par ailleurs pas l'op à changer de compilateur et encore
moins de système (bien que le coeur y soit, j'en conviens). Juste à
faire confiance à la norme plutôt qu'à n'importe quel compilateur
(Microsoft ou autre) en ce qui concerne C++.

un partout, la balle au centre, et après ???


De quelle arêne parlez-vous donc ?! Ce n'est pas un match entre le norme
C++ et Microsoft, il ne manquerait plus que ça ! La norme a le dernier
mot, quoiqu'en pense Microsoft ou le Dalaï Lama.

L'op voulait qu'on "éclaire sa lanterne". Je rappelle qu'il s'agit d'un
fichu "Hello World!" tout ce qu'il y a de plus standard et que d'après
la norme, rien n'y est obsolète.

Et cela m'intéresse aussi de savoir ce qu'il en retourne, car tout
compte fait, ça me paraît trop gros et je crois Microsoft plus malin que
ça pour véhiculer sa propagande... je sais pas, peut-être que l'op
essayé de compiler en C# ? :)



--
R.N.


Avatar
Sylvain
Radamanthe wrote on 20/02/2007 03:51:

Et cela m'intéresse aussi de savoir ce qu'il en retourne, car tout
compte fait, ça me paraît trop gros et je crois Microsoft plus malin que
ça pour véhiculer sa propagande... je sais pas, peut-être que l'op
essayé de compiler en C# ? :)


oui, tout compte fait la flame était peut être un peu trop spontanée et
je pense aussi que cela a été traité en cécharpe.

Sylvain.

Avatar
Arnaud Debaene
"Radamanthe" a écrit dans le message de news:
45da0054$0$10438$
Leo wrote:
Bonjour,

lorsque jecris :

#include <iostream>

int main(){
std::cout<<"Hello, World";
}


VC++ (2005) me dit que c'est obsolète,


Amusant, mais pas très étonnant.

mais je n'ai lu nul part que ça
l'était.


VC++ == Microsoft, donc seul M$
<snip>

Blablabla... Le discours habituel.... On est censé parler programmation ici,
pas politique...

Au fait, tu as vérifié que l'OP avait raison ou pas, avant d'accuser sans
savoir ?????

Arnaud


Avatar
James Kanze
Sylvain wrote:
Leo wrote on 19/02/2007 12:20:
lorsque jecris :

#include <iostream>

int main(){
std::cout<<"Hello, World";
}

VC++ (2005) me dit


quelle version exactement ?

que c'est obsolète, mais je n'ai lu nul part que ça
l'était.


qu'est ce qu'est "c'" dans "c'est obsolète" -- je n'imagine pas que
Studio ait indiqué "c'est obsolète" tout court; il indique plus surem ent
un numéro de ligne, une instruction, ...


Si c'est le message « deprecated », il me semble en plus qu'il
indique un alternatif. (J'ai eu ces messages surtout des
fonctions C, et si le mot « deprecated » est peut-être un peu
fort, les alternatifs qu'il propose sont bien ceux du comité C,
créés parce que le comité C trouvait que les fonctions d'origine
étaient trop dangereux.)

vous a-t-il indiqué que *int* main serait obso. sur un système 64 bit s?
que "std::" est implicite pour un projet définissant un "using std" ?
que placer une virgule après "Hello" est obsolète ?


La plupart du temps, quand VC++ dit que c'est dangereux, c'est
qu'on a passé un char* sans passer la taille. Mais je ne me
rappelle pas d'avoir vu le message pour un char const*, comme
c'est le cas ici.

Si vous pouviez eclairer ma lanterne.


pour ma part, VC 2005 Pro, c'est à dire:

Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)

m'indique juste:

1>------ Build started: Project: console, Configuration: Debug Win32 ---- --
1>Compiling...
1>console.cpp
1>Linking...
1>Embedding manifest...
1>Build log was saved at "file://z:devprjconsoleDebugBuildLog.htm"
1>console - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date , 0 skipped ==========

avec un warning level de 4 ("/W4") soit le plus haut niveau.

sans connaissance du contexte et des caractéristiques de votre projet,
nulle réponse est possible.


Il y a bien une chose dans son code qui est formellement
incorrect (mais je ne connais pas de compilateur où ça ne marche
pas, sauf une version de g++ que j'ai modifié exprès pour le
detecter). Dans <iostream>, selon la norme, tu n'as que les
déclarations des objets globaux (std::cout, etc.), mais non les
définitions des classes ni des surcharges des opérateurs <<.
Toutes les implémentations que je connais (dont VC++) incluent
en fait <istream> et <ostream> dans <iostream>, mais
formellement, si ton code y compte, c'est un comportement
indéfini. (Pratiquement, il y a tellement du code existant qui y
compte qu'aucun fournisseur oserait ne pas le supporter.)

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


1 2