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 

Re: std::cout << NULL

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Rolf Magnus
Guest





PostPosted: Tue Jan 24, 2006 10:28 pm    Post subject: Re: std::cout << NULL Reply with quote



Falk Tannhäuser wrote:

Quote:
Bob Hairgrove wrote:
On 24 Jan 2006 02:59:09 -0800, "kanze" <kanze (AT) gabi-soft (DOT) fr> wrote:
Mit meinem Compiler bekomme ich mit:
std::cout << NULL ;
eine Warnung:

Und dieser Compiler heisst ... ???

Die mir zur Verfügung stehenden heißen g++ (GCC), tun unter
Cygwin bzw. Linux (Debian), haben Versionsnummern von 2.95.4
bis 4.0.3 und warnen alle.

Es sei noch angemerkt, daß das nicht verboten ist. NULL muß nur so definiert
sein, daß es durch eine Integerkonstante mit dem Wert 0 ersetzt wird.
Das sieht dann bei g++ z.B. so aus:

#define NULL (__null)

und __null ist ein Compiler-internes Symbol, das eben so eine Konstante
darstellt, die aber bei Verwendung im Integerkontext eine Warnung
produziert.

--
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
Marcel Müller
Guest





PostPosted: Wed Jan 25, 2006 11:15 pm    Post subject: Re: std::cout << NULL Reply with quote



Hallo,

Bob Hairgrove schrieb:
Quote:
Irgendwo hatte ich gelesen oder gehört, dass NULL-Zeiger auf manche
Betriebssysteme (IBM OS/400, vielleicht?) intern nicht mit dem Wert 0
darstellen...weiss jemand hier evtl. Näheres?

Ja, sowas gibt es. Zum Beispiel ist der Adressraum der inmos-Transputer
- jetzt Thomson und tot - vorzeichenbehaftet, beginnt also bei INT_MIN.
Der 32-Bit-Compiler hat sich aber nicht darum geschert und offenbar
gehofft, dass (damals) niemand mehr wie 2GB RAM hat. Beim
16-Bit-Compiler war es wohl anders. Allerdings kenne ich
Transputer-Hardware, die bei der Adresse 0 (also nach der Hälfte des
Adressraums) für I/O genutzt wurde. Da war 0 also ein gültiger
Pointerwert, egal was der C-Compiler davon hält.

Die Umsetzung passiert aber beim Copilieren und nicht durch ein anderes
C-Makro. Das wäre schließlich nicht kompatibel.


Marcel

--
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
Thomas Maeder
Guest





PostPosted: Thu Jan 26, 2006 5:23 pm    Post subject: Re: std::cout << NULL Reply with quote



Bob Hairgrove <invalid (AT) bigfoot (DOT) com> writes:

Quote:
Irgendwo hatte ich gelesen oder gehört, dass NULL-Zeiger auf manche
Betriebssysteme (IBM OS/400, vielleicht?) intern nicht mit dem Wert
0 darstellen...weiss jemand hier evtl. Näheres?

Es ist nicht nur eine Frage des Betriebssystems, sondern der
Implementation der Programmiersprache. Ich erinnere mich an einen
Modula-2-Compiler für DOS, dessen NULL-Zeiger auf eine bestimmte
reservierte Speicherstelle zeigte. Wenn der Wert des Werts an dieser
Stelle während der Ausführung des Programms verändert wurde,
dereferenzierte das Programm mit sehr guter Wahrscheinlichkeit einen
NULL-Zeiger.

--
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: Thu Jan 26, 2006 5:27 pm    Post subject: Re: std::cout << NULL Reply with quote

Bob Hairgrove wrote:
Quote:
Irgendwo hatte ich gelesen oder gehört, dass NULL-Zeiger auf manche
Betriebssysteme (IBM OS/400, vielleicht?) intern nicht mit dem Wert 0
darstellen...weiss jemand hier evtl. Näheres?

Auch auf solchen Maschinen ist '0' ein Nullpointer und 'cout << NULL'
muss die Ausgabe "0" ergeben.

Den Zeiger mit der Repräsentation 0 würdest du auf so einer Maschine
z.B. mit 'int i = 0; char* p = (char*) i' erhalten.


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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
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.