it-swarm.com.de

Ist die Verwendung von C / C ++ - Makros als Verknüpfung für die bedingte Kompilierung eine gute Vorgehensweise?

Angenommen, ich möchte verschiedene Arten von Ausgabenachrichten in meinem Code haben. Eines davon ist DEBUG, das nur gedruckt wird, wenn der Code im Debug-Modus kompiliert wird.

Normalerweise müsste ich so etwas schreiben

#ifdef DEBUG
    std::cout << "Debug message" << std::endl;
#endif

das ist ziemlich umständlich und nervig an vielen Orten zu verwenden.

Ist es eine gute Praxis, ein Makro für das Code-Snippet zu definieren, damit Sie es auf diese Weise verwenden können?

MSG_DEBUG("Debug message")

Oder gibt es eine andere, elegantere Möglichkeit, ohne Makros damit umzugehen? Ich interessiere mich für mögliche Lösungen sowohl in C als auch in C++, da ich beide Sprachen in verschiedenen Projekten verwende.

13
Eenoku

Sicher, wenn Sie mit der Verwendung von Makros überhaupt einverstanden sind, ist es sicherlich vorzuziehen, ein parametrisiertes zu definieren, anstatt denselben bedingten Code immer wieder zu wiederholen, wenn Sie eine gute Codierung durchführen.

Sollten Sie überhaupt Makros verwenden? Meiner Ansicht nach sollten Sie dies tun, da dies in C akzeptiert wird und für jede makrolose Lösung mindestens etwas auch außerhalb des Debug-Modus ausgeführt werden muss. Der typische C-Programmierer wählt jederzeit ein leicht hässliches Makro über unnötigen Laufzeitaufwand aus.

19
Kilian Foth

Hier gibt es ein Element persönlicher Vorlieben, aber in C++ bevorzuge ich dies in der Header-Datei:

#ifdef _DEBUG
    void DebugMessage(...);
#else
    inline void DebugMessage(...) {}
#endif

Damit die Funktion in Release-Builds integriert ist, aber eine ordnungsgemäße Funktion im Debug-Build ist, können Sie später eine ordnungsgemäße Typprüfung, sinnvolle Fehlermeldungen usw. und die Möglichkeit haben, weitere Funktionen hinzuzufügen (Protokollierung möglicherweise?).

Natürlich müssen Sie auch die entsprechende Definition der Funktion in der Datei .cpp In einen Block #ifdef _DEBUG Einschließen.

13
Jack Aidley

Stellen Sie auf jeden Fall sicher, dass Sie nicht die von Ihrem Team vorgegebenen Code-Richtlinien einhalten. Stellen Sie sicher, dass kein anderer Code im System versucht, dieselbe Funktionalität über eine allgemeine if-Bedingung zu erreichen.

2
James O