Je suis pas expert, alors je poste ici pour commentaires (no offense
JM).
On Mon, 2003-01-27 at 06:25, Jean-Michel.Bencetti wrote:
> C'est une appli que je suis sensé devoir maintenir. Elle fait quelque
> millier de lignes, et intégre une palanquée de bibliothèques.
>
> J'ai du mal à panser que g++ 3.2 ne puisse pas être compatible avec g++
> 2.96. Les spécifications du c++ auraient-elles évolué sans que je soit
> prévénu ?
oui a ce qu'on m'a dit (ou bien alors le comportement par defaut de
g++?).
>
> Voici une illustration du phénomène :
>
> cat hello.cpp
> #include <iostream>
> int main()
> {
> cout << "Hello\n";
> }
>
>
> $ g++ hello.cpp
> hello.cpp: Dans function « int main() »:
> hello.cpp:4: « cout » non déclaré (première utilisation dans cette
> fonction)
> hello.cpp:4: (Chaque identificateur non déclaré est rapporté seulement une
> seule fois pour la fonction dans laquelle il apparaît.)
>
> Si je change <iostream> par <iostream.h>, voici le résultat :
> $ g++ hello.cpp
> Dans le fichier inclus à partir de
> /usr/include/c++/3.2/backward/iostream.h:31,
> à partir de hello.cpp:1:
> /usr/include/c++/3.2/backward/backward_warning.h:32:2: AVERTISSEMENT:
> #warning This file includes at least one deprecated or antiquated
> header. Please consider
> using one of the 32 headers found in section 17.4.1.2 of the C++
> standard. Examples include substituting the <X> header for the <X.h>
> header for C++ includes, or <sstream> instead of the deprecated header
> <strstream.h>. To disable this warning use -Wno-deprecated.
>
> Ce n'est qu'un avertissement, mais ça me donne un a.out qui fonctionne.
c'est deja ca. ca evitera de tout relire.
>
> Comment est-ce possible qu'un exemple aussi éculé puisse donner de si
> étranges résultats ?
ben... perso j'ai du changer qquns de mes softs pour qu'ils compilent,
oui... j'etais surpris...
>
> Et avec du code un peu plus "objet", ça échoue lamentablement avec des
> messages du genre :
>
> /usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../crt1.o: In function
> `_start':
> /usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../crt1.o(.text+0x18):
> undefined reference to `main'
heu y a pas de main() dans ton fichier. si c'est juste un fichier objet,
compile le avec -c et sans -o.
--
Pierre