Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   extern int ProcName oder int ProcName - Ansi C (https://www.delphipraxis.net/55339-extern-int-procname-oder-int-procname-ansi-c.html)

sniper_w 19. Okt 2005 20:45


extern int ProcName oder int ProcName - Ansi C
 
Wo liegt den Unterschied zwischen 2 Deklarationene:
Code:
// Fall 1
extern int ProcName ( smoe Params...);
// Fall 2
int ProcName ( smoe Params...);
Denn, soviel ich weis sind alle Funktionen in C, die nicht als static Deklariert worden sind, external sind? Oder ?

Flocke 19. Okt 2005 20:55

Re: extern int ProcName oder int ProcName - Ansi C
 
"extern" für eine Funktion (bzw. Prozedur) macht keinen Unterschied zur normalen Deklaration.

Relevant ist "extern" eigentlich nur für Variablen, weil man ohne das "extern" ja eine neue Variable erzeugen würde anstatt sie nur zu deklarieren (d.h. bekannt zu machen).

Chewie 19. Okt 2005 20:58

Re: extern int ProcName oder int ProcName - Ansi C
 
Wenn das ganze in einer Biblithek steckt, könnte es Auswirkungn auf das "Name Mangling" haben. Soweit ich weiß, werden als extern deklarierte Funktionen nicht "in die Mangel genommen" (man verzeihe mir das schlechte Wortspiel), andere schon.

negaH 19. Okt 2005 21:48

Re: extern int ProcName oder int ProcName - Ansi C
 
@Chewie: korrekt, besonders wenn diese externe Funktion nicht in einem C Source sondern in einem Assembler Source steht und der Linker diese von dort einlinken muß.

Gruß Hagen

sniper_w 19. Okt 2005 21:52

Re: extern int ProcName oder int ProcName - Ansi C
 
Die eigentliche Funktion befindet sich in einer *.c datei in einem Projekt der zu einem *.exe Kompiliert wird.

Code:
extern int SomeFunc( type1 param1, type2 param2)
{
// code
}
Ich sollte das jetzt in Dephi übersetzen.

Flocke 19. Okt 2005 22:17

Re: extern int ProcName oder int ProcName - Ansi C
 
@Chewie, Hagen: in einer C-Datei wird kein Name-Mangling gemacht - ich kenne zumindest keinen Compiler der mehr macht, als einen Unterstrich vorne anzufügen (Ok, MS-C macht bei stdcall 'nen @# hintendran wg. Parametercount).

In C++ sieht das anders aus, dafür gibt's dort aber auch das Konstrukt
Code:
extern "C" <deklaration>;
bzw.
Code:
extern "C" {
<deklarationen>
}
@sniper_w: was du hingeschrieben hast, widerspricht sich eigentlich - du hast die Funktion als "extern" deklariert und definierst sich auch gleich noch im Anschluss?

sniper_w 19. Okt 2005 22:39

Re: extern int ProcName oder int ProcName - Ansi C
 
Code:
extern int unzClose (unzFile file)
{
Das soll ich übersetzen, habe es nicht selbst ausgedacht.

w3seek 19. Okt 2005 23:14

Re: extern int ProcName oder int ProcName - Ansi C
 
Zitat:

Zitat von sniper_w
Code:
extern int unzClose (unzFile file)
{

Das extern macht da herzlich wenig sinn, es ist schlichtweg falsch. Ignoriere es einfach ;)

negaH 20. Okt 2005 03:19

Re: extern int ProcName oder int ProcName - Ansi C
 
@Flocke: kannte ja den implementierenden C Source noch nicht. Mit dem nun für mich sichtbaren Informationen macht das extern wirklich keinen Sinn. Ich benutze es, bzw. muß es zwingend benutzen, wenn ich mit GCC meine externen ASM Sourcen durch ein Headerfile einlinken will.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz