Überladener Operator in C?

OP #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...
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.