|
| g++ 3.2 og std:: Fra : Torben Nielsen |
Dato : 05-10-02 01:41 |
|
Hej
Med skiftet i g++ fra 2.x 3.x og dertilhørende libstdc++ er man nu
også gået over til at bruge syntaxen med std::cout osv.
Desuden skal man bruge <iostream> istedet for <iostream.h>
(Det tog mig _meget_ lang tid at komme til denne konkusion)
Er der nogen, der ved hvor man kan læse mere om denne "nye" standart??
og:
Er der det muligt vha. ifdef, at checke hvilken compiler version der
bruges, således at noget der ligner følgende bliver muligt:
#ifdef gccv3
#include <iostream>
#else
#include <iostream.h>
#endif
Torben
| |
Mogens Hansen (05-10-2002)
| Kommentar Fra : Mogens Hansen |
Dato : 05-10-02 07:08 |
|
"Torben Nielsen" <torben@worldonline.dk> wrote
[8<8<8<]
> Er der nogen, der ved hvor man kan læse mere om denne "nye" standart??
Det er godt skrive ny i citationstegn.
Standarden er mindst 4 år gammel, og det er ikke urimeligt at sige at den er
næsten 5 år gammel (fra 14. november 1997).
Det ultimative sted at læse om det er i C++ Standarden "ISO/IEC 14882:1998",
som kan købes som PDF fil for $18.
Forhåbentligt kan du læse om i de fleste nyttige C++ bøger. Hvis en bog, som
har til formål at beskrive C++ ikke bruger
#include <iostream>
er den enten gammel (noget før C++ Standarden blev vedtaget) eller
forfatteren har ikke fulgt med i hvad der skete med C++ i lang tid.
Begge dele er et advarselssignal, for det er sandsynligt at der så er store,
nyttige dele af Standard library der ikke bliver beskrevet. Det gælder
oplagte emner som klasserne "std::vector" og "std::string".
Hvis namespace er nyt for dig, og du ikke kender "std::vector" og
"std::string" er bogen
Accelerated C++
Andrew Koenig, Babara E. Moo
ISBN 0-201-70353-X
en kort og god introduktion til moderne C++.
Hvis du kender C++ noget i forvejen, er den hurtig at læse.
gcc 3.1 (og formodentlig senere) virker absolut problemfrit sammen med
programmerne i bogen.
En mere dybtgående og komplet beskrivelse finder du i
The C++ Programming Language, Third Edition (Special Edition)
Bjarne Stroustrup
ISBN 0-201-88954-4 (0-201-70073-5)
Det er naturligvis ikke sådan at blot fordi en bog er lidt gammel, er
indholdet uinteressant - man skal blot forstå forudsætningen for at læse
den.
Det gælder f.eks. bøger som
Advanced C++
James O. Coplien
Addison-Wesley, 1992
ISBN 0-201-54855-0
og
Inside the C++ Object Model
Stanley B. Lippman
Addison-Wesley, 1996
ISBN 0-201-83454-5
[8<8<8]
> Er der det muligt vha. ifdef, at checke hvilken compiler version der
> bruges, således at noget der ligner følgende bliver muligt:
>
> #ifdef gccv3
> #include <iostream>
> #else
> #include <iostream.h>
> #endif
Ja, gcc har de predefinere preprocessor macroer
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
til at afgøre hvilken compiler der bruges
Jeg mener at testen bør laves sådan at default delen er i overensstemmelse
med C++ Standarden, og dermed bør virke med enhver compiler.
#if (__GNUC__ < 3)
#include <iostream.h>
#else
// Standard C++
#include <iostream>
#endif
Bemærk iøvrigt at programmet
<code>
#include <iostream>
int main()
{
std::cout << "Hello, world!" << std::endl;
return 0;
}
</code>
oversætter fint med lidt ældre gcc compilere som gcc 2.92.2 og gcc 2.96.
Venlig hilsen
Mogens Hansen
| |
Torben Nielsen (05-10-2002)
| Kommentar Fra : Torben Nielsen |
Dato : 05-10-02 08:50 |
|
Jeg takker, bukker og nejer for svaret :)
Jeg tænkte nok at standarten var gammel, da disse ikke bliver bliver
indført fra dag til dag.
Jeg vil overveje at købe en noget af det litteratur du nævner, men indtil
da; kender du (eller andre) noget materiale om emnet som er tilgængeligt
online ??
Torben
| |
Ivan Johansen (05-10-2002)
| Kommentar Fra : Ivan Johansen |
Dato : 05-10-02 09:37 |
|
Torben Nielsen wrote:
> Jeg vil overveje at købe en noget af det litteratur du nævner, men indtil
> da; kender du (eller andre) noget materiale om emnet som er tilgængeligt
> online ??
Du kan gratis downloade bogen "Thinking In C++" her:
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
Ivan Johansen
| |
Per Abrahamsen (07-10-2002)
| Kommentar Fra : Per Abrahamsen |
Dato : 07-10-02 16:42 |
|
"Torben Nielsen" <torben@worldonline.dk> writes:
> Med skiftet i g++ fra 2.x 3.x og dertilhørende libstdc++ er man nu
> også gået over til at bruge syntaxen med std::cout osv.
> Desuden skal man bruge <iostream> istedet for <iostream.h>
Følgende program virker med gcc-3.2 for mig:
#include <iostream.h>
int main ()
{
cout << "Hello world\n";
return 0;
}
Det største problem for mig var at forward erklæringer som f.eks.
class ofstream;
ikke længere fungerer, fordi iostream nu er templates, ikke klasser.
I stedet skal man bruge
#include <iosfwd>
> (Det tog mig _meget_ lang tid at komme til denne konkusion)
Jeg får ellers denne advarsel:
/usr/pack/gcc-3.2-lj/include/c++/3.2/backward/backward_warning.h:32:2: warning: #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.
> Er der det muligt vha. ifdef, at checke hvilken compiler version der
> bruges, således at noget der ligner følgende bliver muligt:
>
> #ifdef gccv3
> #include <iostream>
> #else
> #include <iostream.h>
> #endif
Du kan skrive
#include <iostream>
using namespace std;
det virker også med meget gamle versioner af GCC.
| |
Torben Nielsen (07-10-2002)
| Kommentar Fra : Torben Nielsen |
Dato : 07-10-02 20:36 |
|
> Jeg får ellers denne advarsel:
>
> /usr/pack/gcc-3.2-lj/include/c++/3.2/backward/backward_warning.h:32:2: warning: #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.
>
Det samme gør jeg, men ét er at se advarslen, et andet er at analysere sig
frem til hvorfor beskeden kommer og hvordan den omgåes !!!
Torben
| |
|
|