🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
7 messages
7 total messages Started by Kaspar Landsberg Mon, 30 Oct 1995 15:09
inline
#683
Author: Kaspar Landsberg
Date: Mon, 30 Oct 1995 15:09
23 lines
1113 bytes
Tach,

ich habe da eine kleine Frage zu "inline" (bei Funktionen):

In einem C++-Buch steht, dass man bei der Benutzung von "inline" auch  
gleich die ganze Funktion "hinschreiben" muss, selbst da es an der Stelle  
geschieht, wo die Prototypen deklariert werden (das Ganze ist mit "inline"  
immer noch ein Prototyp). Jedoch glaube ich in diesem GNU fuer DOS "Buch"  
gesehen zu haben, wie ein "inline" einfach nur vor den Funktionsprototyp  
gesetzt wurde. Und die Funktion selbst kam dann ganz normal erst am "Ende"  
(nach "main" in diesem Falle).

Ist beides erlaubt? Habe ich mich verguckt? Ist das eine mehr erlaubt als  
das andere?

Danke,

Kaspar

--
Kaspar Landsberg         | "Diplomatie ist die feinfuehlige Waffe des
kl@kl.in-berlin.de       |  zivilisierten Kriegers."
                                                = Unbekannter Hunne =
Re: inline
#691
Author: Stefan Naewe
Date: Tue, 31 Oct 1995 09:13
46 lines
2335 bytes
In article <5wpLesIphjB@kl.in-berlin.de> kl@kl.in-berlin.de (Kaspar Landsberg) writes:

> From: kl@kl.in-berlin.de (Kaspar Landsberg)
> Newsgroups: de.comp.lang.c++
> Date: 30 Oct 1995 16:09:00 +0100
> 
> Tach,
> 
> ich habe da eine kleine Frage zu "inline" (bei Funktionen):
> 
> In einem C++-Buch steht, dass man bei der Benutzung von "inline" auch  
> gleich die ganze Funktion "hinschreiben" muss, selbst da es an der Stelle  
> geschieht, wo die Prototypen deklariert werden (das Ganze ist mit "inline"  
> immer noch ein Prototyp). Jedoch glaube ich in diesem GNU fuer DOS "Buch"  
> gesehen zu haben, wie ein "inline" einfach nur vor den Funktionsprototyp  
> gesetzt wurde. Und die Funktion selbst kam dann ganz normal erst am "Ende"  
> (nach "main" in diesem Falle).
> 
> Ist beides erlaubt? Habe ich mich verguckt? Ist das eine mehr erlaubt als  
> das andere?

Antwort: Ein glasklares JEIN... ;-))

Spasz beiseite:

Soviel ich weisz, ist beides erlaubt und nur eine Frage des
persoenlichen Stils. Man moege mich jedocj korrigieren.

Stefan

> 
> Danke,
> 
> Kaspar
> 
> --
> Kaspar Landsberg         | "Diplomatie ist die feinfuehlige Waffe des
> kl@kl.in-berlin.de       |  zivilisierten Kriegers."
>                                                 = Unbekannter Hunne =
-- 
+--------------------------------------------------------------------+
| Stefan Naewe                                                       | 
| stena@informatik.uni-bremen.de                                     |
| http://www.informatik.uni-bremen.de/~stena                         |
| Universitaet Bremen                                                |
+--------------------------------------------------------------------+
Re: inline
#695
Author: Martin Gieseking
Date: Tue, 31 Oct 1995 22:23
25 lines
1627 bytes
In article <5wpLesIphjB@kl.in-berlin.de>, kl@kl.in-berlin.de (Kaspar Landsberg) says:
>Tach,
>ich habe da eine kleine Frage zu "inline" (bei Funktionen):
>In einem C++-Buch steht, dass man bei der Benutzung von "inline" auch  
>gleich die ganze Funktion "hinschreiben" muss, selbst da es an der Stelle  
>geschieht, wo die Prototypen deklariert werden (das Ganze ist mit "inline"  
>immer noch ein Prototyp). Jedoch glaube ich in diesem GNU fuer DOS "Buch"  
>gesehen zu haben, wie ein "inline" einfach nur vor den Funktionsprototyp  
>gesetzt wurde. Und die Funktion selbst kam dann ganz normal erst am "Ende"  
>(nach "main" in diesem Falle).
>Ist beides erlaubt? Habe ich mich verguckt? Ist das eine mehr erlaubt als  
>das andere?
>Danke, Kaspar


Ich weiss ja nicht wie das beim GNU C++ Compiler ist, aber bei Borland C++
reicht es, das "inline" (sowie andere Modifizierer, wie virtual, static, pascal,...)
beim Prototypen anzugeben. Bei der Funktionsdefinition reicht die "Kurzform".
Im Zweifelsfall probier's einfach aus, und sieh dir den generierten Code mit einem
Debugger oder aehnlichem an. Wenn kein CALL-Befehl erzeugt wurde, funktioniert's 
auch mit GNU C++.

Noch viel Spass,

Martin.
Re: inline
#699
Author: Kaspar Landsberg
Date: Wed, 01 Nov 1995 06:11
13 lines
582 bytes
Moin,

Stefan Naewe <stena@informatik.uni-bremen.de> wrote:

> Soviel ich weisz, ist beides erlaubt und nur eine Frage des
> persoenlichen Stils. Man moege mich jedocj korrigieren.

fein! :-) Vielen Dank fuer die Hilfe,

Kaspar

--
K.L.
Re: inline
#705
Author: Karl-Heinz Krause
Date: Wed, 01 Nov 1995 09:22
29 lines
1577 bytes
Am 30. Okt. 1995 schrieb Kaspar Landsberg (kl@kl.in-berlin.de):

> Tach,

> ich habe da eine kleine Frage zu "inline" (bei Funktionen):

> In einem C++-Buch steht, dass man bei der Benutzung von "inline" auch  
> gleich die ganze Funktion "hinschreiben" muss, selbst da es an der Stelle  
> geschieht, wo die Prototypen deklariert werden (das Ganze ist mit "inline"  
> immer noch ein Prototyp). Jedoch glaube ich in diesem GNU fuer DOS "Buch"  
> gesehen zu haben, wie ein "inline" einfach nur vor den Funktionsprototyp  
> gesetzt wurde. Und die Funktion selbst kam dann ganz normal erst am "Ende"  
> (nach "main" in diesem Falle).

> Ist beides erlaubt? Habe ich mich verguckt? Ist das eine mehr erlaubt als  
> das andere?

Ein inline-Prototyp der form

	inline int f(int);

ist nicht sinnvoll. Es ist ja wesentlich für die inline-Expansion, daß
an der Aufrufstelle die vollständige Definition sichtbar ist. Aus diesem
Grunde dürfen (bzw. sollen) inline-Definitionen auch im Headerfile
stehen. Normalerweise stehen ja nur die Prototypen im Headerfile und die
Definition in irgendeinem der Module.


Karl-Heinz Krause
Re: inline
#698
Author: Martin Cracauer
Date: Wed, 01 Nov 1995 10:48
44 lines
2579 bytes
mgieseki@carina.rz.uni-osnabrueck.de (Martin Gieseking) writes:

>In article <5wpLesIphjB@kl.in-berlin.de>, kl@kl.in-berlin.de (Kaspar Landsberg) says:
>>Tach,
>>ich habe da eine kleine Frage zu "inline" (bei Funktionen):
>>In einem C++-Buch steht, dass man bei der Benutzung von "inline" auch  
>>gleich die ganze Funktion "hinschreiben" muss, selbst da es an der Stelle  
>>geschieht, wo die Prototypen deklariert werden (das Ganze ist mit "inline"  
>>immer noch ein Prototyp). Jedoch glaube ich in diesem GNU fuer DOS "Buch"  
>>gesehen zu haben, wie ein "inline" einfach nur vor den Funktionsprototyp  
>>gesetzt wurde. Und die Funktion selbst kam dann ganz normal erst am "Ende"  
>>(nach "main" in diesem Falle).
>>Ist beides erlaubt? Habe ich mich verguckt? Ist das eine mehr erlaubt als  
>>das andere?
>>Danke, Kaspar


>Ich weiss ja nicht wie das beim GNU C++ Compiler ist, aber bei Borland C++
>reicht es, das "inline" (sowie andere Modifizierer, wie virtual, static, pascal,...)
>beim Prototypen anzugeben. Bei der Funktionsdefinition reicht die "Kurzform".
>Im Zweifelsfall probier's einfach aus, und sieh dir den generierten Code mit einem
>Debugger oder aehnlichem an. Wenn kein CALL-Befehl erzeugt wurde, funktioniert's 
>auch mit GNU C++.

Es ist legal, dass die Definition einer inline-Funktion nicht
beim Aufruf sichtbar ist, aber dann wird sie normalerweise nicht
ingelinded (es gibt aber auch keinen Fehler).

Um richtiges Inlining in dieser Situation zu ermoeglichen, muss man in
den Objectfiles der Library die Definition als Source speichern und
die Objectfiles des Aufrufers muessen Strukturen enthalten, die zur
Linkzeit das ersetzen von Code ermoeglichen. Ich wuerde mal sagen,
dass, wenn es in Borland-C++ geht, das ganze einer Recompilation
nahekommt.

Von der Sprache her muss alles inzulinenende im Headerfile stehen und
das sollte man auch tun, wenn man portabel sein will.

Martin
-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer@wavehh.hanse.de>  -  Fax +49 40 522 85 36
 BSD User Group Hamburg, Germany  - See http://{net,free}bsd.www.de
 Copyright 1995. Redistribution via Microsoft Network is prohibited
Re: inline
#721
Author: Herbert Kremser
Date: Fri, 03 Nov 1995 14:25
29 lines
1714 bytes
Kaspar Landsberg (kl@kl.in-berlin.de) wrote:
: Tach,
: 
: ich habe da eine kleine Frage zu "inline" (bei Funktionen):
: 
: In einem C++-Buch steht, dass man bei der Benutzung von "inline" auch  
: gleich die ganze Funktion "hinschreiben" muss, selbst da es an der Stelle  
: geschieht, wo die Prototypen deklariert werden (das Ganze ist mit "inline"  
: immer noch ein Prototyp). Jedoch glaube ich in diesem GNU fuer DOS "Buch"  
: gesehen zu haben, wie ein "inline" einfach nur vor den Funktionsprototyp  
: gesetzt wurde. Und die Funktion selbst kam dann ganz normal erst am "Ende"  
: (nach "main" in diesem Falle).
: 
: Ist beides erlaubt? Habe ich mich verguckt? Ist das eine mehr erlaubt als  
: das andere?

Das ist schon erlaubt, es muss die inline Funktion nur im selben Modul
(File) verfuegbar sein.
Wenn du aber eine Inline Funktion in ein Headerfile schreibst, muss
da irgendwo auch der Source folgen, sonst kennt sich der Compiler
nicht mehr aus.
Anders als bei richtigen Funktionen, die dann erst vom Linker dazugefuegt
werden.

Herbert
-- 
Herbert Kremser                                      |  "On the Internet,
kremser@flinux.tu-graz.ac.at                         |   nobody knows
kremser@sbox.tu-graz.ac.at                           |   you're a dog." 
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