Hallo, ich suche eine Möglichkeit ein Programm in C# zu schreiben, das C kompatibel ist. Genauer gesagt, ich will in C# mit GUI einen Zustandsautomaten so programmieren, dass man den Code 1:1 in C übernehmen kann um dann statt einer Animation ein richtiges System steuern kann. Soweit klappt alles bis auf eines: Die Benennung der Zustände. Ich habe gedacht, ich mach es mit #define STANDBY 1 Leider kann das C# nicht. Enums sind auch nicht kompatibel, weil bei enum state{standby,on,off}; C: enum state s=on; C#: state s=on; Hätte jemand noch eine Idee? Im schlimmsten Fall muss ich einfach Zahlen verwenden. Danke.
Nils S. schrieb: > #define ON 1 > #define OFF 0 > > if(x==ON) Die #define-Direktive kann nicht zur Deklaration konstanter Werte wie in C und C++ verwendet werden.Definieren Sie Konstanten in C# als statische Member einer Klasse oder einer Struktur.Wenn Sie über mehrere solcher Konstanten verfügen, erwägen Sie, eine separate "Constants"-Klasse zu erstellen.
Warum schreibst du nicht gleich deine Funktionen in C? Man kann doch von einem C#-Programm aus C-Funktionen aufrufen, oder nicht?
C#<->C schrieb: > ich suche eine Möglichkeit ein Programm in C# zu schreiben, das C > kompatibel ist. > Soweit klappt alles bis auf eines: Wie hast du das gemacht? In C gibt es keine Klassen, in C# keine freien Funktionen.
Zwei Möglichkeiten fallen mir dazu spontan ein: 1. Es ist dir ja freigestellt, den C-Präprozessor auch über C#-Quellcode laufen zu lassen. Damit kannst du auch in C# Direktiven wie #define usw. benutzen. Die Frage ist höchstens, wie man den automatischen Aufruf des Präprozessors in ein C#-Projekt integriert. Dazu kenne ich mich in Visual-Studio zu wenig aus, aber irgendwie geht das ganz sicher. 2. Schreib für das C-Programm eine Header-Datei namens typedefs.h, die zu jedem verwendeten Enum-Typ eine Zeile der Form
1 | typedef enum xxx xxx; |
enthält. Diese Datei inkludierst du in jede Quellcodedatei, wenn sie als C-Code kompiliert wird. Das geht natürlich nicht mit #include, aber mit einer Kommandozeilenoption des C-Compilers, bspw. beim GCC mit -include typedefs.h Danach kannst in C die Enumvariablen wie in C# mit
1 | xxx var; |
(ohne das enum-Schlüsselwort) deklarieren.
Ziel ist es nicht eine ganze Datei direkt verwenden zu können. Es sollte möglich sein mit Copy&Paste den Zustandsautomaten kopieren zu können. Die Hardware habe ich hinter Funktionen wie istGeschlossen() und ledAn() versteckt. Das funktioniert. C# hat solche Funktionen. C auch. Einzig problematische sind eben die Zustände. Naja. Eine Reihe von lokalen Variablen const int standby=1; const int wait=2; ... könnte eine Lösung sein.... Lg.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.