🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
2 messages
2 total messages Started by Torsten Vogt Thu, 14 Dec 1995 18:30
Re: g++ Bug
#1005
Author: Torsten Vogt
Date: Thu, 14 Dec 1995 18:30
44 lines
2469 bytes
Ich schrieb:
> |> [...]
> |> 
> |> Das ist kein Bug im g++, sondern ein "handbook not read error" bzw, etwas 
> |> unfeiner: RTFM !
> |> 
> |> Der Grund: int's werden vom g++ standardmaessig als long's interpretiert.

Uwe Behrens schrieb:
> Ich kann mir nicht helfen, aber nach meiner Auffassung waere sowas bei einer
> typgeprueften Sprache mit Ueberladung ein Compilerfehler. 
> 
> Ich lasse mich aber gerne eines besseren belehren. Nur zu!

Von Belehrung kann keine Rede sein. Trotzdem der Versuch einer Antwort:

Halten wir mal fest: Der GNU Compiler belegt fuer 'long int' genauso wie
                     fuer 'int' 32-Bit.
      
D.h. fuer die Funktionsdefinition 'void a(int i) {}' kann bzgl. der 
Argumentliste der gleiche Code generiert werden wie fuer 'void a(long l) {}'.
Der Compiler kennt also nun 2 Funktionen mit dem Namen a und gleichen
Typinformationen bzgl. der Argumente. Anhand dieser Typinformation wird nun
entschieden, welche Funktion tatsaechlich aufgerufen wird.
Der Compiler haette nur eine Chance diese Ueberladung richtig durchzufuehren,
wenn er 'int' und 'long int' unterschiedlich behandeln wuerde.
Ob dies nun ein Compilerfehler ist oder nicht, darueber kann man streiten.

Vernachlaessigt man Implementierungsdetails, so muss ich Dir rechtgeben:
Diese Ueberladen sollte eigentlich funktionieren.

Gruss Torsten

-- 
---------------------------------------------------------------------
| Torsten Vogt                                                      |
|  Universitaet Mannheim - Lehrstuhl Praktische Informatik I        |
|  Seminargebaeude A5                                               |
|  D-68131 Mannheim                                                 |
|                                                                   |
|  Tel  : 0049-621/292-5132  Fax: 0049-621/292-5297                 |
|  email: vogt@pi1.informatik.uni-mannheim.de                       |
|  WWW  : http://pi1.informatik.uni-mannheim.de/HomePages/vogt.html |
---------------------------------------------------------------------
Re: g++ Bug
#1007
Author: Dietmar Kuehl
Date: Thu, 14 Dec 1995 20:47
26 lines
1789 bytes
Hi,
Torsten Vogt (vogt@pi1.uni-mannheim.de) wrote:
: Der Compiler haette nur eine Chance diese Ueberladung richtig durchzufuehren,
: wenn er 'int' und 'long int' unterschiedlich behandeln wuerde.
: Ob dies nun ein Compilerfehler ist oder nicht, darueber kann man streiten.

Wohl kaum! Es ist offensichtlich ein Compilerfehler. Hier ist ein
Auszug aus dem April DWP (3.9.1, basic.fundamental, Vers 4): "There are
four signed integer types:  'signed char', 'short int', 'int', and
'long int'. ...". Wenn 'int' und 'long int' aber gleich behandelt
werden, dann sind es nur noch drei "signed integer types". ... und auf
einer Architektur, wo alle Worte die selbe Groesse haben (etwa einer
Cray: dort gibt es nur 64bit Worte) gaebe es womoeglich nur noch einen
"signed integer" Typ!

: Vernachlaessigt man Implementierungsdetails, so muss ich Dir rechtgeben:
: Diese Ueberladen sollte eigentlich funktionieren.

Es ist kein zulaessiges Implementationsdetail (es ist also nicht
"implementation defined"): In einem Compiler, der dem zukuenftigen ISO
C++ Standard entsprechen will, muessen 'int' und 'long int' zwei
verschiedene Typen sein.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads