Überladener Operator in C?

#3414220
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!
Gast #3414240
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?
Gast #3414244
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...
#3414265
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;
Persönliche Seite #3414451
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.
Gast #3419343
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 ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren