Präprozessor innerhalb Präprozessor

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Präprozessor innerhalb Präprozessor

Beitrag von Xin » Di Okt 11, 2011 5:58 pm

Wie immer habe ich mal wieder etwas ausgefallenere Probleme.

Ich brauche ein Präprozessormakro, das in Abhängigkeit eines Präprozessordefines ein anderes Präprozessor-Makro aufruft.

Momentan sieht das bei mir so aus:

Code: Alles auswählen

#define CPPUNIT_EXPERIMENTAL( test, hostname ) \
#ifdef COMPUTERNAME_##hostname \
    CPPUNIT_TEST( test ) \
#endif
Und die Antwort des Kompilers ist ein klares "No"...

Code: Alles auswählen

error C2162: Formaler Makroparameter erwartet
Beim Kompilieren wird eine Variable COMPUTERNAME_BLABLA erzeugt, wobei BLABLA für den Namen dieses Rechners steht. Ich will damit bezwecken, dass dieser CPPUNIT-Test nur auf diesem Rechner ausgeführt wird (und eben nicht auf anderen Rechnern, weil ich daran entwickle und der Test sowieso noch nicht sauber läuft.)

Jemand eine Idee, wie ich das Visual Studio schöner erklären kann? Im Idealfall so, dass es funktioniert und ohne dass ich das Makro selbst ausformuliert da hinschreiben muss?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Präprozessor innerhalb Präprozessor

Beitrag von Xin » Di Okt 11, 2011 6:26 pm

Aktuelle Lösung:

Code: Alles auswählen

#ifdef  COMPUTERNAME_BLABLA
#define COMPUTERNAME_BLABLA_TEST(test) CPPUNIT_TEST( test )
#else
#define COMPUTERNAME_BLABLA_TEST(test)
#endif

#define CPPUNIT_EXPERIMENTAL( test, hostname ) COMPUTERNAME_##hostname##_TEST( test )
Nicht schön... bin an Alternativen interessiert... ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Präprozessor innerhalb Präprozessor

Beitrag von Kerli » Di Okt 11, 2011 8:05 pm

Nachdem es beim Präprozessor nur genau einen Durchlauf gibt wird es schwer sein schönere Lösungen zu finden.

Warum gehst du denn eigentlich über den Hostnamen? Wenn du nur eine mit einem define arbeitest sparst du dir eine Zeile ;)
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Präprozessor innerhalb Präprozessor

Beitrag von Xin » Do Okt 13, 2011 9:17 pm

Kerli hat geschrieben:Warum gehst du denn eigentlich über den Hostnamen? Wenn du nur eine mit einem define arbeitest sparst du dir eine Zeile ;)
Weil der Test nur auf einem bestimmten Computer laufen soll. Also insbesondere nicht auf dem Buildserver... ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Präprozessor innerhalb Präprozessor

Beitrag von Kerli » Do Okt 13, 2011 9:59 pm

Da wäre es doch eigentlich schöner mit zb. -DBUILD_EXPERIMENTAL_TESTS beim Bauen auf deinem Rechner. Den Hostnamen zu verwenden ist dann vielleicht doch etwas schwer wartbar. Was wenn jemand anderer die Test kompilieren oder ausschließen möchte? Dann müsste man das im Code anpassen, und das würde Mehraufwand bedeuten ;)
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Präprozessor innerhalb Präprozessor

Beitrag von Xin » Do Okt 13, 2011 10:33 pm

Kerli hat geschrieben:Da wäre es doch eigentlich schöner mit zb. -DBUILD_EXPERIMENTAL_TESTS beim Bauen auf deinem Rechner. Den Hostnamen zu verwenden ist dann vielleicht doch etwas schwer wartbar. Was wenn jemand anderer die Test kompilieren oder ausschließen möchte? Dann müsste man das im Code anpassen, und das würde Mehraufwand bedeuten ;)
Wenn ich den Test entwickle, will den kein anderer ausführen. Der tut's ja noch nicht.

Wenn ich einen Test entwickle, will ich auch nicht die Tests der anderen ausführen.

Die einfachste Möglichkeit zu bestimmen, wer hier was will, ist den Namen des Computers abzufragen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Panke
Beiträge: 70
Registriert: So Nov 14, 2010 10:47 am

Re: Präprozessor innerhalb Präprozessor

Beitrag von Panke » Fr Okt 14, 2011 12:55 pm

Das einfachste was mir einfällt ist -DBUILD_XIN_TEST

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Präprozessor innerhalb Präprozessor

Beitrag von Xin » Fr Okt 14, 2011 1:18 pm

Panke hat geschrieben:Das einfachste was mir einfällt ist -DBUILD_XIN_TEST
Die Projekte werden auf dem lokalen Rechner erzeugt. Übergibt man den Computernamen, so ist genau dieses -D auf meinem Rechner ein anderes als auf dem Build-Server: -DCOMPUTERNAME_XIN
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Präprozessor innerhalb Präprozessor

Beitrag von Kerli » Fr Okt 14, 2011 2:41 pm

Xin hat geschrieben:Die Projekte werden auf dem lokalen Rechner erzeugt. Übergibt man den Computernamen, so ist genau dieses -D auf meinem Rechner ein anderes als auf dem Build-Server: -DCOMPUTERNAME_XIN
Achso. Ich hab gedacht du fragst irgendwie den Hostnamen vor dem kompilieren ab ^^
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten