Forum: PC-Programmierung C# Code C kompatibel schreiben


von C#<->C (Gast)


Lesenswert?

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.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

#define ON 1
#define OFF 0

if(x==ON)

von Peter II (Gast)


Lesenswert?

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.

von Rolf M. (rmagnus)


Lesenswert?

Warum schreibst du nicht gleich deine Funktionen in C? Man kann doch von 
einem C#-Programm aus C-Funktionen aufrufen, oder nicht?

von Flutsch (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von C#<->C (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.