Forum: Compiler & IDEs Überladener Operator in C?


von Jacobs J. (nicht_profi_in_c)


Lesenswert?

Hallo, ich bin kein Profi in C, habe daher eine Frage:

In einer C Datei kann ich Variablen vom Typ __Vector definieren, z.B.:
1
__Vector V1, V2, V3 /*Definiere 3 Variablen vom Type __Vector in .c Datei*/
Den Datentyp __Vector habe ich in eine Header Datei als ein typedef 
struct definiert der aus Funktionspointer besteht, z.B:

1
typedef struct s__vector {              //Der Typ __Vector ist in Header   void (*func1)(void);           //folgendermassen definiert:    
2
  void(*func2)(float);
3
  void(*func3)(int);                     
4
         void(*func4)(void);
5
  } __Vector

Wenn ich jetzt beispielsweise in der C Datei einer definierten Variable 
vom Typ __Vector die Summe zweier Variablen vom gleichen Type __Vector 
zuweisen möchte, beispielsweise:
1
V1 = V2 + V3   //(alle Variablen sind vom Typ __Vector)
meckert der Compiler das die Zuweisungsoperatoren ("=" und "+") nicht 
kompatibel zu der struct definition sind. Das ist auch Logisch.

Die Frage ist jetzt, wie bringe ich dem Compiler bei, das auf dem Typ 
__Vector die Operanden "+" und "=" ausgeführt werden können.
Ich hätte eine Ahngung wie ich das in C++ mit Hilfe des Schlüsselworts 
"operator" (also überladene operatoren) realisieren könnte. Habt Ihr 
einen Vorschlag wie man das in C machen könnte?

Ich hoffe auf eure Hilfe!
Vielen Dank im Vorraus!

von Peter II (Gast)


Lesenswert?

Jacobs Jenkins schrieb:
> Habt Ihr
> einen Vorschlag wie man das in C machen könnte?

einfach eine Funktion nutzen:

V1 = StructAdd(V2, V3);

Bei C++ läuft es am ende auf das gleiche Raus.

Aber warum hast du Funktionszeiger in deiner Struct was soll da am ende 
rauskommen?

von Dr. Sommer (Gast)


Lesenswert?

Jacobs Jenkins schrieb:
> Ich hätte eine Ahngung wie ich das in C++ mit Hilfe des Schlüsselworts
> "operator" (also überladene operatoren) realisieren könnte.
Richtig:
1
class Vector {
2
  // ...
3
  Vector operator + (const Vector& other);
4
};
In C kann man Operatoren wie "+" gar nicht überladen. Warum nicht 
einfach C++ verwenden?

von Oliver (Gast)


Lesenswert?

Jacobs Jenkins schrieb:
> Die Frage ist jetzt, wie bringe ich dem Compiler bei, das auf dem Typ
> __Vector die Operanden "+" und "=" ausgeführt werden können.

Gar nicht. Nimm halt C++.
Das vereinfacht dir dann auch das Gerödel mit den Funktionspointern, 
denn ganz ehrlich, ich fürchte, du weißt nicht so ganz genau, was du da 
überhaupt machst (bzw. zusammenkopierst).

Oliver
P.S Doppelte Unterstriche am Beginn eines Bezeichers sind auch so eine 
Sache...

von Jacobs J. (nicht_profi_in_c)


Lesenswert?

Hallo,

danke euch erst mal für die Antworten! Es geht hierbei um einen 
speziellen Prozessor mit einem Vektor-Kern. Dieser hat so seine eigene 
Syntax, bennenungen von Datentypen und Variablen. Ist sehr ähnlich zu C. 
Möchte den Compiler halt so einstellen das dieser beim compilieren 
bestimmte Ausrücke so erkennt als ob diese C-Konform währen.... :)

Funktionspointer habe ich eingeführt da ich davor typedefs zur 
definition von Datentypen verwendet haben die wiederum pointers sind, 
also beispielsweise:
1
typedef signed int*     __vptr_int32; 
2
typedef unsigned int*     __vptr_uint32;

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jacobs Jenkins schrieb:
> Funktionspointer habe ich eingeführt da ich davor typedefs zur
> definition von Datentypen verwendet haben die wiederum pointers sind,

Und wo ist da die Erklärung?

Oliver schrieb:
> P.S Doppelte Unterstriche am Beginn eines Bezeichers sind auch so eine
> Sache...

Das sollte Dir zu Denken geben, Oliver hat das hier zurecht angemerkt.

von Rolf Magnus (Gast)


Lesenswert?

Jacobs Jenkins schrieb:
> Die Frage ist jetzt, wie bringe ich dem Compiler bei, das auf dem Typ
> __Vector die Operanden "+" und "=" ausgeführt werden können.

Mal blöd gefragt: Was soll denn bei der Addition zweier Funktionspointer 
sinnvolles rauskommen?

von Oliver S. (oliverso)


Lesenswert?

Jacobs Jenkins schrieb:
> Ist sehr ähnlich zu C.
> Möchte den Compiler halt so einstellen...

Entweder ist das C, dann geht es nicht, oder es irgendwas anderes, dann 
ist alles möglich. Da wir hier aber im gcc-Forum sind, müsste das dann 
schon eine sehr spezielle gcc-Version sein. Und dann gibt's dazu 
bestimmt auch eine sehr spezielle Doku zum nachlesen.

Oliver

von Willhelm (Gast)


Lesenswert?

Jacobs Jenkins schrieb:
> Hallo,
>
> danke euch erst mal für die Antworten! Es geht hierbei um einen
> speziellen Prozessor mit einem Vektor-Kern. Dieser hat so seine eigene
> Syntax, bennenungen von Datentypen und Variablen. Ist sehr ähnlich zu C.
> Möchte den Compiler halt so einstellen das dieser beim compilieren
> bestimmte Ausrücke so erkennt als ob diese C-Konform währen.... :)

Welchen Prozessor mit Vektor-Kern benutzt du? Scheint wieder aktuell zu 
werden ...

von Jacobs J. (nicht_profi_in_c)


Lesenswert?

Benutze die Embedded Vector Engine (Eve) von Texas Instruments...

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.