000
13.10.2019, 19:07 Uhr
Rolli
|
Hallo, eine Frage zum Präprozessor. Ich schreibe gerade einen recht speziellen Parser und suche nach *irgendwas* am Zeilenanfang. Für die weitere Bearbeitung benötige ich sowohl das "irgendwas" nummerisch, als auch die Position des Zeichens nach dem *irgendwas*.
Beispiel:
enum {FAIL, TEST, BLABLA, USW}; char *aLine = "*test* weiterer Inhalt nach dem *test*"; char *aPtr; int aStatus;
aPtr = NULL; if (!strncmp(aLine, "*test*", 6)) { aStatus = TEST; aPtr = aLine + 6; } if (!strncmp(aLine, "*blabla*", 8)) { aStatus = BLABLA; aPtr = aLine + 8; } ... if (!aPtr) aStatus = FAIL;
Nun habe ich eine längere Liste derartiger Schlüsselwörter, und möchte es vereinfachen. Meine Idee war, dafür ein Makro zu schreiben:
#define aCheck(Pattern) if (!strncmp(aLine, "*"+#Pattern+"*", strlen(#Pattern))) {aStatus = Pattern; aPtr=aLine+strlen(#Pattern)+2 }
und es dann zu verwenden:
aCheck(TEST); aCheck(BLABLA); ...
Mein Problem: Wie bekomme ich vor und hinter die Stringrepräsentation meines Suchpatterns #Pattern die Trennzeichen, im Beispiel "*"? Die Konkatenation "*"+#Pattern+"*" funktioniert nicht???
Danke im Voraus für jeden Tipp. |