2010-11-18 9 views

Antwort

3

Ich weiß nichts über Erlang, aber vermutlich kann man nicht einfach eine .h-Datei erstellen mit nur der erforderlichen definiert in und # include es (oder gleichwertig) in beiden Orten.

asuming Sie dies nicht tun, würde ich auf dem Auto sucht eine Datei für die eine vom anderen zu erzeugen.

EDIT: Nachdem sich die Erlang docs nur sieht, ist das Format sehr ähnlich, aber nicht ganz dasselbe.

Erlang benötigt -define(Const, Replacement)

C benötigt #define const replacement

So würde ich eine Textdatei schreiben, die die Erlang-Syntax enthielt (nur für diese Definitionen) und dann als Pre-Build-Schritt in meiner C build I entlang der Linien etwas tun, von

sed s/-define/#define/g 
sed s/[\(\),]//g 

auf eine temporäre Kopie dieser Datei würde, das würde ich dann #include in meiner C-Quelle.

+0

Beachten Sie, dass diese Lösung nicht funktioniert, sobald Ihre Makrodefinition ein anderes Makro verwendet. – Zed

+0

@Zed: In der Tat, oder mit irgendwelchen parametrisiert (function-like) Makros. Aber die Beispiele im Original sind sehr einfach und sollten in Ordnung sein. – Vicky

+0

Ja, die, die ich brauche, sind so einfach. –

1

Sie können (versuchen) verwenden C-Präprozessor von gcc in erlang, wie gcc Möglichkeiten:

  • -E Stopp nach Stufe Vorverarbeitung
  • -x language (Sie ein Set kann die korrekte Ausgabe gibt)
  • -P Ausgabe für #line
  • -C Kommentare halten (nicht entfernen/* */und //)
1

Eine sehr dynamische Art und Weise ist eine Tabelle, in C weicht zu halten leicht durch Makros erzeugt # verwenden, die char *name haben -> Werte.

Dann ist dieses eine Tabelle senden verwenden Erlang am Anfang.

#define DRV_CONNECT    'C' 
#define DRV_DISCONNECT   'D' 
#define DRV_SELECT    'S' 

#define ENTRY(X) {#X, X} 

struct table_entry 
{ 
    const char *name; 
    int value 
}; 

struct table_entry table[] = 
{ 
    ENTRY(DVR_CONNECT), 
    ENTRY(DRV_DISCONNECT), 
    ENTRY(DRV_SELECT) 
}; 

Verwenden Sie diese Tabelle, um sie am Anfang zu erlang zu senden, entschlüsseln sie dort in eine Tupel Liste und dies bis suchen verwenden.