Forum: PC-Programmierung Funktionspointer


von Alfred (Gast)


Lesenswert?

Hallo,

in einer Windows C Konsolenanwendung soll Objekt das in main bereits 
deklariert wurde einer anderen C Datei zur Verfügung gestellt werden.
1
main.c file:
2
3
objectPort  Port;

Diese Klasse beinhaltet sämtliche Funktionen. Dieses sollen nun in der 
Datei Test.c auch benutzt werden können. Muss ich da einen 
Funktionspointer darauf setzen bzw. wie kann ich auf die Funktionen in 
der Test.c Datei zugreifen?

von Oliver S. (oliverso)


Lesenswert?

in main.h:
1
struct objectPort  {...}; // oder wie auch immer die Deklaration von objPort aussieht
2
extern objectPort  Port;

in test.c
1
#include "main.h"

Aber sehr vermutlich ist dein Problem ein ganz anderes.
Das fängt schon damit an, das C gar keine Klassen mit Funktionen 
kennt...

Oliver

: Bearbeitet durch User
von 🐧 DPA 🐧 (Gast)


Lesenswert?

Wenn du Klassen hast, ist es schonmal kein C. Eventuell ist es C++?

Klasse in die hpp Datei. Funktionen in cpp Dateien Definieren.

Um auf das Objekt, und dessen Methoden zuzugreifen, musst du nur 
schauen, das es irgendwie erreichbar ist. Du kannst es per Argument 
einer Funktion übergeben. Oder du kannst es global in einer C Datei 
anlegen "klasse objektname;", und in einem Header mit "extern klasse 
objektname;" verfügbar machen. Oder du kannst irgendwelche Singelton und 
Factorty Pattern nutzen. Hängt davon ab, wo und wie man es verwenden 
will.
Globale variablen können schnell nachteilig werden, oft gibt es bessere 
Lösungen.

von Alfred (Gast)


Lesenswert?

Ja es ist auch kein C++ sondern C.
1
typedef struct
2
{
3
 ...
4
} objectPort;

von PittyJ (Gast)


Lesenswert?

Die Funktion einfach extern deklarieren und dann aufrufen.

z.B.
extern void vPortYield( void );

   vPortYield();

von Oliver S. (oliverso)


Lesenswert?

Alfred schrieb:
> Ja es ist auch kein C++ sondern C.

Dann "enthält" dein Klasse keine Funktionen, weil es sowas in C nicht 
gibt.
Da wirst du jede Funktionsdeklaration einzeln in main.h schreiben 
müssen.

main.h
1
typedef struct
2
{
3
 ...
4
} objectPort;
5
extern objectPort  Port;
6
void objPortInit(objPort* p);
7
int objPortFoo();
8
char* objPortBla();

Oliver

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Alfred schrieb:
> Ja es ist auch kein C++ sondern C.

Was genau meinst du dann mit:
> Diese Klasse beinhaltet sämtliche Funktionen

C hat keine Methoden. Willst du einer Funktion das Objekt übergeben? 
Oder willst du einen Funktionspointer in deiner Struktur ablegen, und 
später aufrufen? Und warum machst du das nicht einfach, was ist dir 
unklar?

von PittyJ (Gast)


Lesenswert?


von Alfred (Gast)


Lesenswert?

Alles gut ich habs kappiert. Ich mache dies nun anders. Ich werde meine 
Anwendung in der main.c schreiben. Ist quasi nur ein Testprogramm.

von Dirk B. (dirkb2)


Lesenswert?

Alfred schrieb:
> Alles gut ich habs kappiert.

> Ich werde meine Anwendung in der main.c schreiben.

Dann ist der erste Satz gelogen.

von Oliver S. (oliverso)


Lesenswert?

Dirk B. schrieb:
> Alfred schrieb:
>> Alles gut ich habs kappiert.
>
>> Ich werde meine Anwendung in der main.c schreiben.
>
> Dann ist der erste Satz gelogen.

Wieso? Er schreibt ja nicht, was er kapiert hat...

Oliver

von Lothar (Gast)


Lesenswert?

C struct und C++ class ist doch dasselbe. Man kann auch in C OOP machen, 
eben mit struct und Funktionspointer Array: GTK ist ein Beispiel dafür. 
Und auch C++ OOP ist nicht "echt" - wird beim kompilieren wieder 
prozedural.

https://de.wikipedia.org/wiki/GTK_(Programmbibliothek)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.