Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » g++ soll nicht implzit header einbinden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.08.2003, 09:25 Uhr
Marzel



Hi!

Gibt es eine Möglichkeit g++ eine Option zu übergeben, dass man explizit alle benötigten Header includen muss und diese nicht vom compiler automatisch included werden, wie z.B. <string> oder <istream>,<ostream> beim include von <iostream>, ...usw.

Bis dann Marzel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.08.2003, 10:02 Uhr
0xdeadbeef
Gott
(Operator)


Nein, und das würde auch keinen Sinn machen. In iostream werden cout, cin, cerr und clog definiert, das heißt, wenn iostream included ist, müssen die Typen istream und ostream bekannt sein. Deswegen steht in /usr/include/c++/<version>/iostream auch

C++:
#include <ostream>
#include <istream>


...und es wäre ziemlich merkwürdig, dem Präprozessor zu erzählen, dass er die include-Direktiven auslassen soll.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.08.2003, 12:26 Uhr
Marzel



Zitat aus "C++ In A Nutshell" ( www.tempest-sw.com/cpp/draft/ch13-29-iostream.html )

"Many C++ programmers assume that <iostream> automatically #includes <istream> and <ostream>, but the standard does not guarantee that behavior. Always #include every header you need."

Daher dachte ich, dass es eventuell eine Warningoption gibt, die auf fehlende Header-includes aufmerksam macht.

Dieser Post wurde am 15.08.2003 um 12:26 Uhr von Marzel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.08.2003, 12:47 Uhr
Pablo
Supertux
(Operator)


Ich hab jetzt die iostream.h Datei vom Debian Mathe Server meiner Uni
und dort habe ich entdeckt

C++:
#include <streambuf.h>

extern "C++" {
class istream; class ostream;
typedef ios& (*__manip)(ios&);
typedef istream& (*__imanip)(istream&);
typedef ostream& (*__omanip)(ostream&);



und in streambuf.h

C++:
extern "C++" {
class istream; /* Work-around for a g++ name mangling bug. Fixed in 2.6. */
class ostream; class streambuf;


D.h. iostream.h includiert nicht direkt, aber das tut streambuf.h, d.h. iostream hat schon diese andere Header Dateien

in iostream.h der Informatik Fak. hab ich in g++ 2.9.5

C++:
extern "C++" {
class istream; class ostream;
typedef ios& (*__manip)(ios&);
typedef istream& (*__imanip)(istream&);
typedef ostream& (*__omanip)(ostream&);

extern istream& ws(istream& ins);
extern ostream& flush(ostream& outs);
extern ostream& endl(ostream& outs);
extern ostream& ends(ostream& outs);

class ostream : virtual public ios
{
    // NOTE: If fields are changed, you must fix _fake_ostream in stdstreams.C!
    void do_osfx();
  public:
    ostream() { }
// usw.


iostream.h hat die Klasse ostream generiert.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 15.08.2003 um 12:50 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.08.2003, 13:15 Uhr
virtual
Sexiest Bit alive
(Operator)


@pablo
Was Du zitierst sind Vorwärtsdekalrationen, aber keine Includes...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.08.2003, 13:18 Uhr
0xdeadbeef
Gott
(Operator)


@Marzel: In der iostream werden cin usw. deklariert. Damit das funktioniert, müssen die Typen istream und ostream vollständig bekannt sein. Das heißt, entweder included iostream sowohl istream als auch ostream, oder der selbe Mist steht nochmal drin, was denselben Effekt hätte.

@Pablo: iostream.h ist schon seit ner ganzen Weile veraltet. Nimm

C++:
#include <iostream>


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.08.2003, 13:21 Uhr
0xdeadbeef
Gott
(Operator)


Ups, verkuckt. Das muss garnicht so sein ... *peinlich*

Um auf die Anfangsfrage zurückzukommen: Wenn du ne STL-Implementierung ausgräbst, in der iostream istream und ostream nicht included, kannst du die anstelle der GNU STL benutzen, aber ansonsten gibt es kein solches Flag für den Compiler.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 15.08.2003 um 13:29 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.08.2003, 13:47 Uhr
Pablo
Supertux
(Operator)


@virtual:
ich weiss, ich weiss. Ich wollte sagen, dass iostream.h nicht diese andere 2 Dateien includiert, weil iostream.h die Klassen selbst macht. Das ist was ich zitieren wollte.

@beefy: aber die neue iostream include hat auch die iostream.h, oder??? Oder erzähle ich jetzt Quatsch?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.08.2003, 13:55 Uhr
0xdeadbeef
Gott
(Operator)


Ja. Es ist umgekehrt, die iostream.h sieht so aus (g++ 3.3.1)

C++:
#ifndef _CPP_BACKWARD_IOSTREAM_H
#define _CPP_BACKWARD_IOSTREAM_H 1

#include "backward_warning.h"
#include <iostream>

using std::iostream;
using std::ostream;
using std::istream;
using std::ios;
using std::streambuf;

using std::cout;
using std::cin;
using std::cerr;
using std::clog;
#ifdef _GLIBCPP_USE_WCHAR_T
using std::wcout;
using std::wcin;
using std::wcerr;
using std::wclog;
#endif

using std::ws;
using std::endl;
using std::ends;
using std::flush;

#endif


Übrigens liegt sie in /usr/include/c++/3.3/backward/iostream.h, was eine Auskunft darüber gibt, ob man sie noch benutzen sollte. Es kann sein, dass das irgendwann wegfällt, und dann kompilieren deine Programme nicht mehr.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: