🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
5 messages
5 total messages Started by Ernoe Kovacs Thu, 27 Aug 1992 08:47
Verwendung von altem C-Code in C++
#33
Author: Ernoe Kovacs
Date: Thu, 27 Aug 1992 08:47
38 lines
1757 bytes
Hallo,

eine der Vorteile von C++ ist die Weiterverwendung von alten C-Code.
Dabei sind wir jetzt auf ein grosses Probelm gestossen. In vielen
alten C-Programmen werden in den Header-files keine Prototypes
fuer Funktionen angegebn. Die Deklaration sieht ungefaehr so aus:

extern int foo()

Die Definition im C-File sieht dann so aus:

int foo (a,b,c)
int a;
char b;
int c;

(Habe ich Deklaration und Definition jetzt richtigherum benutzt ?)

Nur leider fasst unser C++ Compiler die Deklaration foo() als
eine Funktion ohne Parameter auf und meldet dann Fehler ohne Ende.
(Natuerlich haben wir ein extern "C" { ...} um das include statement.

a) Viele C++ Buecher sagen, diese Inkompatibilitaet sei so gewollt.
   Sie bieten auch irgendwelche Loesungen mit Hilfe des Preprocessors
   (#ifdef _cpluplus ...) an. Eine solche Loesung waere extrem unguenstig,
   da wir eine dreistellige Zahl von unterschiedlichen header-Files haben.

b) Gibt es vielleicht ein Tool, mit dem man die Header-Files anpassen kann?
   (Geringe Hoffnung...)

c) Warum wird das den gemacht... Auch ANSI-C schreibt Protoypen aus
   Kompatibilitaetsgruenden nicht vor.

d) Gibt es C++ Compiler, die die alten Deklarationen anstandslos
   verkraften?

Gruss
- Ernoe
Re: Verwendung von altem C-Code in C++
#34
Author: Joachim Schrod
Date: Thu, 27 Aug 1992 17:33
38 lines
1873 bytes
In article <KOVACS.92Aug27094714@orgel.informatik.uni-stuttgart.de>, kovacs@informatik.uni-stuttgart.de (Ernoe Kovacs) writes:
> 
> eine der Vorteile von C++ ist die Weiterverwendung von alten C-Code.
> Dabei sind wir jetzt auf ein grosses Probelm gestossen. In vielen
> alten C-Programmen werden in den Header-files keine Prototypes
> fuer Funktionen angegebn. Die Deklaration sieht ungefaehr so aus:
> 
> extern int foo()
> 
> Die Definition im C-File sieht dann so aus:
> 
> int foo (a,b,c)
> int a;
> char b;
> int c;
> 
> (Habe ich Deklaration und Definition jetzt richtigherum benutzt ?)

Ja. ;-)

Bzgl. Deiner Frage: C++ kann (die meisten) Standard-C (aka ANSI-C)
Programme verarbeiten, aber keine K&R C Programme.

Um Prototypen aus K&R-Code zu erzeugen, gibt es einige Tools. Frage
archie z.B. mal nach `protoize'. Andere Tools wurden mehrfach in c.s.m
und c.s.u gepostet.

Mit den so erzeugten Prototypen wird C++ gluecklich. (Tja, nachdem
Ihr zuerst alle Fehler rausgeworfen habt, auf die Ihr bei der
Gelegenheit stosst.)

--
Joachim

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Joachim Schrod			Email: schrod@iti.informatik.th-darmstadt.de
Computer Science Department
Technical University of Darmstadt, Germany
Re: Verwendung von altem C-Code in C++
#47
Author: Markus Kuhn
Date: Fri, 28 Aug 1992 10:11
24 lines
1697 bytes
kovacs@informatik.uni-stuttgart.de (Ernoe Kovacs) writes:

>c) Warum wird das den gemacht... Auch ANSI-C schreibt Protoypen aus
>   Kompatibilitaetsgruenden nicht vor.

Grosse Programme ohne Prototypes zu entwickeln ist eine sehr gefaehrliche
Angelegenheit, da meiner Erfahrung nach ein grosser Teil aller Fehler
auf Typinkonsistenzen zurueckzufuehren ist und da ist es doch nett, wenn
diese gleich vom Compiler entdeckt werden.

Daher mein Tip: Vergesst K&R (nur erste Auflage) so schnell wie moeglich
und benutzt immer Prototypes. Auch Funktionen ohne Parameter sollte man
in Standard-C mit xyz(void); deklarieren. Dann kann der Compiler
alles checken, man macht weniger Fehler und der Umstieg auf C++ wird 
erheblich leichter. Langfristig ist es also sicher von Vorteil,
dass C++ die Prototypes erzwingt!

Markus

---
Markus Kuhn, Computer Science student -=-=- University of Erlangen, Germany
Internet: mskuhn@immd4.informatik.uni-erlangen.de  |  X.500 entry available
-A distributed system is one in which the failure of a computer you didn't-
-even know existed can render your own computer unusable. (Leslie Lamport)-
Re: Verwendung von altem C-Code in C++
#36
Author: Joerg Heuer
Date: Fri, 28 Aug 1992 12:06
14 lines
1030 bytes
Versuch's doch mal damit, von s"amtlichen include-files Kopien anzufertigen,
die statt der leeren Klammer eine Ellipsis ("...") enthalten. Sowas geht mit
dem sed sehr leicht. Ich hatte leider nicht die Musse mich durch die Syntax-
beschreibung von Stroustrup zu w"uhlen, ein Praxistest mit unserem AT&T
Frontend verlief zumindest erfolgreich.

Ciao,
J"org.

--
Joerg Heuer                   | UUCP:     jh@gmdtub.uucp
GMD-FIRST an der TUB          | INTERNET: jh@first.gmd.de
Rudower Chaussee 5, Geb. 13.7 | KOMEX:    heuer@kmx.gmd.dbp.de
D-1199 Berlin Adlershof, FRG  | Tel/Fax:  +49 30 6704 - 5819/5610
ZUSAMMENFASSUNG: Verwendung von altem C-Code in C++
#38
Author: Ernoe Kovacs
Date: Fri, 28 Aug 1992 22:09
36 lines
1970 bytes
ZUSAMMENFASSUNG: K&R-Code in C++

Also, den Netzetiquetten folgend, kurz vor meinenm Urlaub noch schnell
ne Zusammenfassung der Antworten:

1) extern int foo() verhindern (natuerlich) die Ueberpruefung
   der Typen der Argumente. Da C++ dadurch mehr Sicherheit in die
   Sache bringen will, ist es prinzipiell zu begruessen.

2) Einige C++-Compiler stoeren sich auch nicht daren.
   Der g++ 2.2 versteht es direkt (peinlich, peinlich, bei meinem
   ersten Test hiess die Funktion im Header-File anders als im Source-Code :)
   Andere (Zortech, Borland ?) scheinen auch keine Probleme zu haben.

3) Im gcc 2.2 (und frueher) gibt es die protoize/unprotoize Programme.
   Die wandeln .c und .h files um. Klappt in den ersten Tests ganz gut.

Persoenliche Meinung:
Die Argumente mit dem sicheren linken sind ja schoen und gut, aber
Kompatibilitaet hat auch was fuer sich. Vor allen Dingen, wenn
es so wenig kostet und der Verantwortung des Benutzers ueberlassen
werden kann. C UND (!!!) C++ sind eher fuer den muendigen Programmierer,
der sich bewusst und aus Ueberzeugung an Konventionen wie Prototypen
haelt.


Danke an:

Harald Bayer <bayer@hermes>
patz@ipc1.rrzn.uni-hannover.dbp.de
Achim Loerke <al@bredex.de>
Michaela.Harlander@Physik.TU-Muenchen.DE


- Ernoe
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