2016-08-05 7 views
0

Ich habe eine FunktionHerstellung "% d" string als Makro in C++

Format (sOperCnt, SStext ("%d"), m_nOperCnt); 

Grundsätzlich wird es den Wert m_perCnt zu sOperCnt eingestellt. Meine Klasse enthält viel ähnlichen Code, also kann ich diese "%d" als Makro verwenden und überall verwenden. dh

#define INT_FORMAT  "%d" 
(sOperCnt, INT_FORMAT, m_nOperCnt) 

Ich weiß nicht, ob es gute Praxis ist oder nicht.

+1

IMO, ** Ja ** 'INT_FORMAT' ist definitiv besser als' "% d" ', da es Flexibilität bietet, zu ändern und zu verfolgen. Zum Beispiel können Sie "% u" 'in 1 Aufnahme mit diesem Makro machen. Darüber hinaus helfen Sie dem Optimierer, alle "% d" -Punkte auf einen einzelnen schreibgeschützten Speicherort zu setzen. Keine versehentlichen Extraräume wie '"% d "' sind mit Makro möglich. 'INT_FORMAT' ist aufgrund seiner spezifischen Natur besser durchsuchbar. – iammilind

+0

Danke für den Ratschlag :-) Ich verstehe nicht, was du meinst "du kannst"% u "in 1 Schuss mit diesem Makro machen" dieser Kommentar? –

+0

Eine andere Funktion könnte gut sein; 'void FormatInt (int x, int y) {Format (x, SStext ("% d "), y); } '. – molbdnilo

Antwort

-1

Nein, in der Regel Makros sind keine gute Praxis, und dies ist keine Ausnahme. Sie haben eine einfache Konstante: const char* const INT_FORMAT = "%d";

+0

Eine einfachere Konstante ist 'char const INT_FORMAT [] ="% d ";'. –

+0

Makros sind NICHT immer schlecht. Es gibt viele Dinge, die ohne Makros nicht zu erreichen sind. Zum Beispiel kann man mit 'const char *' die Compiler-Fähigkeit von String-Verkettungen nicht nutzen, wie etwa "Die Kosten sind" INT_FORMAT ". Die Antwort gibt einen allgemeinen Hinweis, berührt jedoch nicht die spezifische Frage. Warum denkst du, dass die Verwendung von Makro in diesem (Frage-) Fall auch schlecht ist? – iammilind