Toon posts:

[C#] String replace Macro

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik weet niet zeker of het kan wat ik wil.

Probleem is dit: Op een embedded systeem gebruiken we veel textstrings om debuginfo op een pc te zien. Hierbij worden ook variabelen gebruikt.

bijvoorbeeld zo:
DBG_INFO3("Dit is een infostring en dit zijn de variabelen: %s, %i, %s",string1, int1, string2);

DBG_INFO is een macro dat een functie aanroept die met sprintf hier een string van maakt en deze via UART naar de PC stuurt. Er zijn voor verschillende aantallen variabelen verschillende macro's.

Ik ben al een poosje bezig met zoeken en proberen, maar heb nog geen oplossing gevonden.
Dit lijkt me een leuke uitdaging voor echte programerende Tweakers.
Inmiddels zijn er meer dan 1000 van deze strings aanwezig.
Dit vreet veel te veel geheugen. Daarom willen we deze strings vervangen.

Een optie is om een precompiler te maken die deze strings voor het echte compilen vervangt door codes + de format specifiers en de codes + de string in een database of zoiets opslaat, zodat de PCTool deze codes terugvertaalt naar de infostring. De formatspecifiers blijven nodig om sprintf uit te kunnen voeren.

Maar een mooiere oplossing zou zijn om de strings met behulp van een macro te vervangen.

De bedoeling is dus een macro te maken, die de formatstring:

("Dit is een infostring en dit zijn de variabelen: %s, %i, %s"

vervangt door "__LINE__ __FILE__ %s%i%s" ,zodat de PCTool de file en het line number op kan zoeken en zo de echte info string weervind.

  • Enigma69855
  • Registratie: September 2000
  • Laatst online: 12-03-2022

Enigma69855

Candle in my eye.......

Jan Willem.....

Robbert en ik begrijpen je vraag niet echt... zou misschien helpen als het wat duidelijker was.

Ok, ik denk dat ik weet wat je bedoelt, maar het is wel erg lastig, en ik kan me niet voorstellen dat je daar zelf al niet achter was, dus is de vraag vast anders :)

Wegens verhuizing te koop gevraagd: Sociaal leven in omgeving Arnhem


Verwijderd

Topicstarter
De vraag is wel goed. Het is inderdaad erg lastig.

Het macro moet er voor zorgen, dat een formatstring vervangen wordt door alleen de formatspecifiers.

voorbeeld:

#include "stdio.h"

char* Str2= new char[7];

#define SHOW(string, arg1, arg2, arg3)\
printf(REDUCESTR(string,Str2),arg1,arg2,arg3)

#define REDUCESTR(str,str2)\
str2="%s%i%i"

void main()
{
int i=111;
int j=222;
char* Str="test";

SHOW("Dit is een formatstring: %s %i %i",Str, i, j);
}

Deze code wordt door de preprocessor van de compiler vertaalt als:

printf((str2="%s%i%i"),Str,i,j);

Mijn probleem is, dat ik van te voren niet weet hoeveel, of welke formatspecs er zijn. Dit moet dus uit de formatstring gezocht worden. Maar dit moet zodanig, dat de formatstring door de preprocessor NIET in de gecompilede code komt, anders levert het nog geen geheugenvoordeel op.

Hoop dat het iets duidelijker is.