Frage

Hier

ist ein Beispiel für eine der Kopfschmerzen ich meine:

Wir haben ein Multi-Plattform-Projekt, das für die Darstellung von Text auf den Bildschirm meist Unicode-Strings verwendet. Auf Fenster in VC ++ die Zeile:

swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);

kompiliert fein und druckt die breite Zeichenfolge in die andere breite Zeichenfolge. Allerdings sollte dies wirklich sein:

swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);

Ohne die ‚% s‘ mit ‚% ls‘ ersetzt wird dies nicht auf anderen Plattformen arbeiten. Als Test in unserer Umgebung auf Windows ist einfacher, schneller und viel einfacher zu debuggen. Diese Art von Fehler können leicht unbemerkt bleiben.

Ich weiß, dass die beste Lösung richtigen Code in erster Linie zu schreiben, aber unter Druck einfache Fehler gemacht werden, und in diesem speziellen Fall kann der Fehler leicht unbemerkt für eine lange Zeit gehen.

Ich vermute, dass es viele Variationen auf dieser Art von Fehlern sind, dass wir noch genießen sind.

Hat jemand eine schöne und nette Art und Weise, diese Art von Fehlern zu finden?

: D

War es hilfreich?

Lösung

Da keine der Funktionen von *printf Familie sind typsicher Sie entweder

  • Suche nach wahrscheinlichen Fehler über reguläre Ausdrücke und befestigen Sie sie manuell
  • einen anderen Ansatz verwenden, der typsicher ist, vielleicht basierend auf stringstreams oder Boost.Format

Andere Tipps

Sie möchten vielleicht einen Blick haben unter FastFormat bei Boost.Format ist zu langsam für Ihre Bedürfnisse .

Im Vergleich zu stringstreams und Boost.Format:

  
      
  • iostreams: FastFormat.Format ist   schneller als iostreams, indem sie zwischen   ~ 100-900%, in allen Fällen
  •   
  • Boost.Format: FastFormat.Format ist   schneller als Boost.Format, indem sie zwischen   ~ 400-1650%, in allen Fällen
  •   
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top