C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Systemfunktionen in c++
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Matthias Pfeifer
Guest





PostPosted: Sat Jun 05, 2004 4:43 pm    Post subject: Systemfunktionen in c++ Reply with quote



Gruesse->Hallo();

Ein Frage in Sachen Systemprogrammierung in C++. Ich programmiere
c++ unter Linux und stehe vor der Aufgabe Systemfunktionen benutzen zu
wollen, wie sie üblicherweise von der libc angeboten werden
(Zugriffsrechte ändern oder abfragen, Liste der Dateien aus dem aktuellen
Verzeichnis erstellen, etc). Gibt es da vielleicht eine C++ Weg um diese
Aufgaben zu erledigen? Spricht etwas dagegen die Funktionen der C
Bibliothek in meinen C++ Objekten zu benutzen?

Danke,
Matthias

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Daniel Albuschat
Guest





PostPosted: Sat Jun 05, 2004 7:43 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote



Matthias Pfeifer wrote:
Quote:
Ein Frage in Sachen Systemprogrammierung in C++. Ich programmiere
c++ unter Linux und stehe vor der Aufgabe Systemfunktionen benutzen zu
wollen, wie sie üblicherweise von der libc angeboten werden
(Zugriffsrechte ändern oder abfragen, Liste der Dateien aus dem aktuellen
Verzeichnis erstellen, etc). Gibt es da vielleicht eine C++ Weg um diese
Aufgaben zu erledigen?

Teils, teils.
boost::filesystem uebernimmt manche der genannten Aufgaben,
aber nicht alle.

Quote:
Spricht etwas dagegen die Funktionen der C
Bibliothek in meinen C++ Objekten zu benutzen?

Nein.

cu,
Daniel Albuschat

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Stefan Reuther
Guest





PostPosted: Sat Jun 05, 2004 8:43 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote



Matthias Pfeifer wrote:
Quote:
Ein Frage in Sachen Systemprogrammierung in C++. Ich programmiere
c++ unter Linux und stehe vor der Aufgabe Systemfunktionen benutzen zu
wollen, wie sie üblicherweise von der libc angeboten werden
(Zugriffsrechte ändern oder abfragen, Liste der Dateien aus dem aktuellen
Verzeichnis erstellen, etc). Gibt es da vielleicht eine C++ Weg um diese
Aufgaben zu erledigen? Spricht etwas dagegen die Funktionen der C
Bibliothek in meinen C++ Objekten zu benutzen?

Nein, da spricht nichts dagegen. Die ISO C Bibliothek ist Teil der ISO
C++ Bibliothek.

Für POSIX und anderes gibt es meines Wissens keine genormten
C++-Bindungen, allerdings dürfte es z.B. für Threads oder Sockets schon
einige fertige C++-Bibliotheken geben. Schau mal bei Boost vorbei[1].
Für Grafik (X11) gibt's erst recht C++-Bibliotheken (Qt bleistiftsweise).

Die Integration der C-Bibliotheken in die C++-Bibliothek ist allerdings
gelegentlich etwas holprig. Beispielsweise bekommst du bekanntermaßen
aus <cstdio> die Funktion std::fopen. Man könnte nun vermuten, dass man
analog dazu ebenfalls std::popen bekommt, aber das trifft eben doch eher
selten zu. Am besten kommst du dann wohl, wenn du einfach die C-Header
(<stdio.h>) inkludierst und wie in C verwendest.


Stefan

--
[1] das dürfte für C++ ein ähnlicher Satz sein wie für Perl "da gibt's
ein Modul im CPAN dafür".

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Edzard Egberts
Guest





PostPosted: Sun Jun 06, 2004 9:37 am    Post subject: Re: Systemfunktionen in c++ Reply with quote

Hallo Matthias,

Quote:
libc
Gibt es da vielleicht eine C++ Weg

ja, Du baust Dir eine "my_libc.h" und eine "my_libc.cpp". Im Header
werden die Funktionen deklariert, aber die libc wird erst in der
Quellcodedatei eingebunden. Bei der Deklaration kann man gleich auf C++
umsetzen, indem z.B. kein "const char*" sondern ein "string" von
Funktionen geliefert wird. Also im Header ruhig Standard-C++ verwenden
(<string> und so weiter), aber die Systemsachen im Quellcode
"verstecken". Diese "C++-Umsetzung" finde ich sehr komfortabel, weil man
dann "richtige" C++-Systemfunktionen hat und so Gebastel mit Puffern und
Zeigern nur einmal programmieren muss und nicht bei jedem Aufruf einer
derartigen Funktion.

Quote:
Spricht etwas dagegen die Funktionen der C
Bibliothek in meinen C++ Objekten zu benutzen?

Die Möglichkeit der Portierung. Es gibt einige Funktionen der libc, die
z.B. unter Linux und Windows anders aussehen. Wenn Dein Code wirklich
mal auf einem anderen System verwendet werden soll, muss mit der
genannten Methode nicht der gesamte Quelltext durchforstet werden,
sondern der Systemkrempel ist schön in einer Datei und kann mit ein paar
#ifdef angepasst werden, ohne dass am "Interface" herumgemurkst wird.

Gruß,

Ed

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Daniel Albuschat
Guest





PostPosted: Sun Jun 06, 2004 10:10 am    Post subject: Re: Systemfunktionen in c++ Reply with quote

Stefan Reuther wrote:
Quote:

Die Integration der C-Bibliotheken in die C++-Bibliothek ist allerdings
gelegentlich etwas holprig. Beispielsweise bekommst du bekanntermaßen
aus <cstdio> die Funktion std::fopen. Man könnte nun vermuten, dass man
analog dazu ebenfalls std::popen bekommt, aber das trifft eben doch eher
selten zu. Am besten kommst du dann wohl, wenn du einfach die C-Header
(<stdio.h>) inkludierst und wie in C verwendest.

Ich denke mal, die meisten <cstdio> werden in irgend einer Weise
<stdio.h> beinhalten. Deshalb wuerde ich eher vorschlagen, ein
in der Funktion lokales using namespace std; zu verwenden, und dann
fopen gleichermassen wie popen verwenden. IMHO sieht das huebscher aus,
als stdio.h zu includieren (und evtl. auch eine Warnung vom Compiler
in Kauf zu nehmen).

Bei mir (gcc 3.3.3) funktioniert es zumindest so.

MfG,
Daniel Albuschat

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Wolfgang Kaufmann
Guest





PostPosted: Sun Jun 06, 2004 10:25 am    Post subject: Re: Systemfunktionen in c++ Reply with quote

* Thus spoke Stefan Reuther <stefan.news (AT) arcor (DOT) de>:

Hallo,

Quote:
Für POSIX und anderes gibt es meines Wissens keine genormten
C++-Bindungen, allerdings dürfte es z.B. für Threads oder Sockets schon
einige fertige C++-Bibliotheken geben. Schau mal bei Boost vorbei[1].

Ich kenne es zwar noch nicht so lange, aber bisher gefällt mir »netxx«
ziemlich gut, siehe <http://pmade.org/software/netxx/>.


Wolfgang.
--
"If you've a highlighter pen, these lines above have got to be marked."

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Sun Jun 06, 2004 11:10 am    Post subject: Re: Systemfunktionen in c++ Reply with quote

Daniel Albuschat wrote:

Quote:
Stefan Reuther wrote:

Die Integration der C-Bibliotheken in die C++-Bibliothek ist
allerdings gelegentlich etwas holprig. Beispielsweise bekommst du
bekanntermaßen aus <cstdio> die Funktion std::fopen. Man könnte nun
vermuten, dass man analog dazu ebenfalls std::popen bekommt, aber das
trifft eben doch eher selten zu. Am besten kommst du dann wohl, wenn
du einfach die C-Header (<stdio.h>) inkludierst und wie in C
verwendest.

Ich denke mal, die meisten <cstdio> werden in irgend einer Weise
stdio.h> beinhalten. Deshalb wuerde ich eher vorschlagen, ein
in der Funktion lokales using namespace std; zu verwenden, und dann
fopen gleichermassen wie popen verwenden. IMHO sieht das huebscher
aus, als stdio.h zu includieren (und evtl. auch eine Warnung vom
Compiler in Kauf zu nehmen).

Bei mir (gcc 3.3.3) funktioniert es zumindest so.

Das Problem dabei ist, daß du dann weder ISO- noch POSIX-konform bist,
da die ISO kein popen definiert und POSIX keinen Header <cstdio>. Laut
POSIX ist popen in <stdio.h> definiert.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Stefan Reuther
Guest





PostPosted: Sun Jun 06, 2004 2:00 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote

Daniel Albuschat wrote:
Quote:
Stefan Reuther wrote:
Die Integration der C-Bibliotheken in die C++-Bibliothek ist allerdings
gelegentlich etwas holprig. Beispielsweise bekommst du bekanntermaßen
aus <cstdio> die Funktion std::fopen. Man könnte nun vermuten, dass man
analog dazu ebenfalls std::popen bekommt, aber das trifft eben doch eher
selten zu. Am besten kommst du dann wohl, wenn du einfach die C-Header
(<stdio.h>) inkludierst und wie in C verwendest.

Ich denke mal, die meisten <cstdio> werden in irgend einer Weise
stdio.h> beinhalten. Deshalb wuerde ich eher vorschlagen, ein
in der Funktion lokales using namespace std; zu verwenden, und dann
fopen gleichermassen wie popen verwenden.

Das geht solange gut, bis du irgendwann mal ein Stück POSIX o.ä.
außerhalb einer Funktion brauchst, beispielsweise für den Prototypen
einer Funktion / die Deklaration einer Klasse, welche ein 'FILE*'- oder
'ssize_t'-Member hat.

Ansonsten verwende ich dieses Verfahren auch gelegentlich - meistens
allerdings als Workaround für kaputte Bibliotheken. Ich hab das
sicherlich hier schon öfters erwähnt: bei Linux/libc5 ist 'isdigit' usw.
aus <cctype> immer noch ein Makro, und bei Borland C++ 5.5. gilt
selbiges für 'strcpy' usw.


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Stefan Reuther
Guest





PostPosted: Sun Jun 06, 2004 2:02 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote

Stefan Ram wrote:
Quote:
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:

Nein, da spricht nichts dagegen. Die ISO C Bibliothek ist Teil der ISO
C++ Bibliothek.

Folgende Funktion zum Beispiel nicht.

#include <ctype.h
int isblank(int c);

IIRC streiten sich da die Gelehrten noch. Immerhin verweist ISO 14882
auf ISO 9899, und die aktuelle Version von ISO 9899 definiert nun mal
'isblank'. In 14882 steht dann, dass hat.

Aber in der Praxis ist das eh Makulatur, also schreibt man ein
configure-Script und gut is.


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Stefan Reuther
Guest





PostPosted: Sun Jun 06, 2004 2:47 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote

Stefan Ram wrote:
Quote:
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
IIRC streiten sich da die Gelehrten noch. Immerhin verweist ISO 14882
auf ISO 9899, und die aktuelle Version von ISO 9899 definiert nun mal
'isblank'. In 14882 steht dann, dass <cctype> den selben Inhalt wie 9899
hat.

ISO 14882 verweist auf ISO/IEC 9899:1990.

"This second edition cancels and replaces the first edition, ISO/IEC
9899:1990".

Quote:
Aber in der Praxis ist das eh Makulatur, also schreibt man ein
configure-Script und gut is.

/Was/ soll Makulatur sein?

Die Aussage "in <cctype> gibt es std::isdigit, weil das in ISO 14882
steht" bringt mir nichts, wenn sich der Compiler / die Library nicht
dran hält. Klar kann ich das theoretisch dem Hersteller um die Ohren
hauen, aber schmerzärmer ist eben meistens, den Workaround zu
implementieren. Der wäre eben entweder '#include <ctype.h>' oder
'#include <cctype>, using namespace std;', und in beiden Fällen
'isdigit' ohne Namespace-Angabe benutzt.


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Sun Jun 06, 2004 8:44 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote

Stefan Reuther wrote:

Quote:
Stefan Ram wrote:
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
IIRC streiten sich da die Gelehrten noch. Immerhin verweist ISO 14882
auf ISO 9899, und die aktuelle Version von ISO 9899 definiert nun mal
'isblank'. In 14882 steht dann, dass <cctype> den selben Inhalt wie
9899 hat.

ISO 14882 verweist auf ISO/IEC 9899:1990.

"This second edition cancels and replaces the first edition, ISO/IEC
9899:1990".

"C++ is a general purpose language based on the C programming language
as described in ISO/IEC 9899:1990 /Programming languages - C/ (1.2)."

Das sagt schon mal deutlich aus, daß es auf 9899:1990 basiert und auf
nichts anders. Wie sollte es denn auch auf was basieren, was erst
danach rauskam. C++ verweist ja auch auf C und führt dazu einige
Änderungen ein. Die berücksichtigen die neue Version der C-Norm ja gar
nicht und sind deshalb möglicherweise zum Teil gar nicht darauf
anwendbar oder lückenhaft.

In 1.2 heißt es auch noch:

"The following standards contain provision which, through reference in
this text, constitue provisions of this International Standard. A the
time of publicaction, the editions indicated were valid. All standards
are subject to revision, and parties to agreements based on this
International Standard are encouraged to investigate the possiblility
of applying the most recent editions of the standards indicated below."

Das bedeutet, daß eine neue Revision von C nur dann auch für C++ gilt,
wenn dies explizit in einer neuen Revision von C++ so angegeben wird,
und sonst nicht.

Quote:
Aber in der Praxis ist das eh Makulatur, also schreibt man ein
configure-Script und gut is.

/Was/ soll Makulatur sein?

Die Aussage "in <cctype> gibt es std::isdigit, weil das in ISO 14882
steht" bringt mir nichts, wenn sich der Compiler / die Library nicht
dran hält. Klar kann ich das theoretisch dem Hersteller um die Ohren
hauen, aber schmerzärmer ist eben meistens, den Workaround zu
implementieren. Der wäre eben entweder '#include <ctype.h>' oder
'#include <cctype>, using namespace std;', und in beiden Fällen
'isdigit' ohne Namespace-Angabe benutzt.

Das funktioniert in der Praxis dann aber auch nicht immer.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Jun 07, 2004 2:30 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote

Daniel Albuschat <daniel (AT) viming (DOT) de> wrote

Quote:
Stefan Reuther wrote:

Die Integration der C-Bibliotheken in die C++-Bibliothek ist
allerdings gelegentlich etwas holprig. Beispielsweise bekommst du
bekanntermaßen aus <cstdio> die Funktion std::fopen. Man könnte nun
vermuten, dass man analog dazu ebenfalls std::popen bekommt, aber
das trifft eben doch eher selten zu. Am besten kommst du dann wohl,
wenn du einfach die C-Header (<stdio.h>) inkludierst und wie in C
verwendest.

Ich denke mal, die meisten <cstdio> werden in irgend einer Weise
stdio.h> beinhalten.

Das darf nicht sein. Eine Include von <cstdio> darf nur Makros in den
globalen Namespace einfugen; alle Funktionen, Typen u.s.w. dürfen nur in
std:: vorkommen.

In der Praxis sind konforme Implementierungen ehe selten.

Quote:
Deshalb wuerde ich eher vorschlagen, ein in der Funktion lokales using
namespace std; zu verwenden, und dann fopen gleichermassen wie popen
verwenden. IMHO sieht das huebscher aus, als stdio.h zu includieren
(und evtl. auch eine Warnung vom Compiler in Kauf zu nehmen).

Bei mir (gcc 3.3.3) funktioniert es zumindest so.

Gcc basiert sich meinstens auf der libc des Systems. Was eine andere
Lösung außerst schwierig macht. Trotzdem aber:

#include <cstdio>

int FILE ;

ist ein legales C++-Programm, und muss von einem konformen Compiler
angenommen sein.

Z.Z. finde es ich persönlich einfacher zu erkennen, dass es um C-Header
geht, und <stdio.h> zu benutzen. Und alle darein definierten Symbolen
anderswo zu vermeiden -- die C++-Norm erlaubt keine Makros, aber da auch
sind nicht alle Implementierungen konform.

--
James Kanze GABI Software
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

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Rolf Magnus
Guest





PostPosted: Mon Jun 07, 2004 6:30 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:

Quote:
Daniel Albuschat <daniel (AT) viming (DOT) de> wrote in message
news:<c9uqj1$c2c$06$1 (AT) news (DOT) t-online.com>...
Stefan Reuther wrote:

Die Integration der C-Bibliotheken in die C++-Bibliothek ist
allerdings gelegentlich etwas holprig. Beispielsweise bekommst du
bekanntermaßen aus <cstdio> die Funktion std::fopen. Man könnte nun
vermuten, dass man analog dazu ebenfalls std::popen bekommt, aber
das trifft eben doch eher selten zu. Am besten kommst du dann wohl,
wenn du einfach die C-Header (<stdio.h>) inkludierst und wie in C
verwendest.

Ich denke mal, die meisten <cstdio> werden in irgend einer Weise
stdio.h> beinhalten.

Das darf nicht sein. Eine Include von <cstdio> darf nur Makros in den
globalen Namespace einfugen; alle Funktionen, Typen u.s.w. dürfen nur
in std:: vorkommen.

Das ist ja trotzdem nicht unmöglich:

namespace std
{
#include <stdio.h>
}

Aber hier ist auch der Knackpunkt, warum ich bei der Verwendung
irgendwelcher POSIX-Funktionen _immer_ <stdio.h> verwenden werde. Wenn
ich nun <cstdio> include, weiß ich nicht, was ich bekomme. Sind die
POSIX-Funktionen nun im namespace std? Oder im globalen Namespace? Oder
werden sie dort gar nicht definiert?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Stefan Reuther
Guest





PostPosted: Mon Jun 07, 2004 7:30 pm    Post subject: Re: Systemfunktionen in c++ Reply with quote

Rolf Magnus wrote:
Quote:
Stefan Reuther wrote:
Stefan Ram wrote:
ISO 14882 verweist auf ISO/IEC 9899:1990.

"This second edition cancels and replaces the first edition, ISO/IEC
9899:1990".

"C++ is a general purpose language based on the C programming language
as described in ISO/IEC 9899:1990 /Programming languages - C/ (1.2)."

Das sagt schon mal deutlich aus, daß es auf 9899:1990 basiert und auf
nichts anders. Wie sollte es denn auch auf was basieren, was erst
danach rauskam.

Wieso nicht? 'basieren' vielleicht nicht, aber wenn (beispielsweise) ein
Technical Corrigendum zu C ein neue Eigenschaft von 'strcmp' eingeführt
hätte, sehe ich nicht, wieso die dann nicht in C++ automatisch
übernommen werden sollte.

Das Problem der inkompatiblen Syntaxänderungen in C99 kenne ich aber.
Leider.

Quote:
In 1.2 heißt es auch noch:

"The following standards contain provision which, through reference in
this text, constitue provisions of this International Standard. A the
time of publicaction, the editions indicated were valid. All standards
are subject to revision, and parties to agreements based on this
International Standard are encouraged to investigate the possiblility
of applying the most recent editions of the standards indicated below."

Das bedeutet, daß eine neue Revision von C nur dann auch für C++ gilt,
wenn dies explizit in einer neuen Revision von C++ so angegeben wird,
und sonst nicht.

Meiner Meinung heißt das: wenn jemand einen Vertrag abschließt 'zu
liefern ist ein C++-Compiler / C++-Programm gemäß ISO 14882', dann
sollen sich die Vertragspartner (parties to agreements based on this
International Standard) einigen, in welchem Umfang sie die jeweils
neuesten Versionen von ISO 9899, IEEE 754, ISO 10646 usw. anwenden.

Das sagt nichts darüber aus, welche Version nun "defaultmäßig" Teil von
C++ ist.

Quote:
Aber in der Praxis ist das eh Makulatur, also schreibt man ein
configure-Script und gut is.

/Was/ soll Makulatur sein?

Die Aussage "in <cctype> gibt es std::isdigit, weil das in ISO 14882
steht" bringt mir nichts, wenn sich der Compiler / die Library nicht
dran hält. Klar kann ich das theoretisch dem Hersteller um die Ohren
hauen, aber schmerzärmer ist eben meistens, den Workaround zu
implementieren. Der wäre eben entweder '#include <ctype.h>' oder
'#include <cctype>, using namespace std;', und in beiden Fällen
'isdigit' ohne Namespace-Angabe benutzt.

Das funktioniert in der Praxis dann aber auch nicht immer.

Beispiel? Bei mir hat's bisher immer funktioniert.

void trimWhitespace(std::string& s) {
using namespace std; // <--
std::string::size_Type n = 0;
while (n < s.size() && isspace((unsigned char) s[n])) // <--
++n;
s.erase(0, n);
}


Stefan

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Wed Jun 09, 2004 7:10 am    Post subject: Re: Systemfunktionen in c++ Reply with quote

Stefan Reuther <stefan.news (AT) arcor (DOT) de> wrote in message

Quote:
Rolf Magnus wrote:
Stefan Reuther wrote:
Stefan Ram wrote:
ISO 14882 verweist auf ISO/IEC 9899:1990.

"This second edition cancels and replaces the first edition, ISO/IEC
9899:1990".

"C++ is a general purpose language based on the C programming
language as described in ISO/IEC 9899:1990 /Programming languages -
C/ (1.2)."

Das sagt schon mal deutlich aus, daß es auf 9899:1990 basiert und
auf nichts anders. Wie sollte es denn auch auf was basieren, was
erst danach rauskam.

Wieso nicht? 'basieren' vielleicht nicht, aber wenn (beispielsweise)
ein Technical Corrigendum zu C ein neue Eigenschaft von 'strcmp'
eingeführt hätte, sehe ich nicht, wieso die dann nicht in C++
automatisch übernommen werden sollte.

Frage der Qualität der Implementierung? Alle C++ Compiler, die ich
kenne, kommen auch mit einem C Compiler. Ich würde erwarten, dass wenn
der C Compiler C99 implementiert, Erweiterungen gegenüber C90, die
absolut kein Problem in C++ darstellen, übernommen werden. M.E. stellt
eine zusätzliche Funktion in <ctype.h> kein Problem für C++; es scheint
mir auch normall, dass sie in <cctype> übernommen wird.

Dagegen muss man sagen, dass C Compiler, die C99 implementieren, kaum
häufiger sind, als C++ compiler, die ISO 14882 voll implementieren.
Also, rein auf der Norm zu basieren heißt, nicht portabel zu sein:-(. Ob
man in C oder in C++ schreibt.

Quote:
Das Problem der inkompatiblen Syntaxänderungen in C99 kenne ich aber.
Leider.

In 1.2 heißt es auch noch:

"The following standards contain provision which, through reference
in this text, constitue provisions of this International Standard. A
the time of publicaction, the editions indicated were valid. All
standards are subject to revision, and parties to agreements based
on this International Standard are encouraged to investigate the
possiblility of applying the most recent editions of the standards
indicated below."

Das bedeutet, daß eine neue Revision von C nur dann auch für C++
gilt, wenn dies explizit in einer neuen Revision von C++ so
angegeben wird, und sonst nicht.

Meiner Meinung heißt das: wenn jemand einen Vertrag abschließt 'zu
liefern ist ein C++-Compiler / C++-Programm gemäß ISO 14882', dann
sollen sich die Vertragspartner (parties to agreements based on this
International Standard) einigen, in welchem Umfang sie die jeweils
neuesten Versionen von ISO 9899, IEEE 754, ISO 10646 usw. anwenden.

Das sagt nichts darüber aus, welche Version nun "defaultmäßig" Teil
von C++ ist.

Ich habe nur eine unkorregierte Version von ISO 14882:1998 am Hande; da
steht eindeutig die Referenzen: "ISO/IEC 9899:1990, Programming
languages - C" und "ISO/IEC 9899/Amd.1:1995, Programming languages - C.
AMENDMENT 1: C Integrity". Also, wenn dies nicht in einer Korrektur
geändert wurde (und ich glaube nicht, dass es geändert wurde), dann
basiert sich ISO C++ eindeutig auf C95.

Quote:
Aber in der Praxis ist das eh Makulatur, also schreibt man ein
configure-Script und gut is.

/Was/ soll Makulatur sein?

Die Aussage "in <cctype> gibt es std::isdigit, weil das in ISO 14882
steht" bringt mir nichts, wenn sich der Compiler / die Library nicht
dran hält. Klar kann ich das theoretisch dem Hersteller um die Ohren
hauen, aber schmerzärmer ist eben meistens, den Workaround zu
implementieren. Der wäre eben entweder '#include <ctype.h>' oder
'#include <cctype>, using namespace std;', und in beiden Fällen
'isdigit' ohne Namespace-Angabe benutzt.

Das funktioniert in der Praxis dann aber auch nicht immer.

Beispiel? Bei mir hat's bisher immer funktioniert.

void trimWhitespace(std::string& s) {
using namespace std; // <--
std::string::size_Type n = 0;
while (n < s.size() && isspace((unsigned char) s[n])) // <--
++n;
s.erase(0, n);
}

Im ursprunglichen Posting geht es um isblank(). isspace() gehört zum
C90, und sogar K&R C -- ich habe sie schon in 1982 benutzt. isblank()
ist neu; sie kommt in C99 vor, aber nicht in früheren Versionen. Formell
betrachtet also gehört sie nicht zu C++; ich wurde aber erwarten, dass
wenn der mitgelieferte C Compiler sie enthält, dass sie auch in C++ zur
Verfügung steht.

--
James Kanze GABI Software
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

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.