/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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

Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408509
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste