2 Stimmen

Zweck des #ifdef vor main() im Programm

Was ist der Zweck des folgenden #ifdef? Und warum erlaubt es mir, durch mein Programm zu schreiten, wenn ich es debugge (aktive Lösungskonfiguration = Debug), aber nicht, wenn die aktive Lösungskonfiguration = Release ist oder wenn die Lösung gebaut wird und die aktive Lösungskonfiguration = Release ist?

#ifdef RUN
int main(int argc, char* argv[])
{
   Einige Funktionen

}
#endif

Ich arbeite mit dem Legacy-Code eines anderen Entwicklers und ich weiß, dass ich es einfach entfernen kann und es sich normal verhalten wird, aber ich möchte verstehen, warum der vorherige Programmierer diese Präprozessoranweisungen hier platziert hat.

2voto

djechlin Punkte 57120

Denken Sie daran, dass in einem verknüpften C-Programm nur eine main() Funktion vorhanden sein kann.

Daher sollte, wenn dies als Bibliothek genutzt werden soll, das main deaktiviert werden (im Vorkompilieren entfernt werden).

Soll es eigenständig ausgeführt werden, sollte die main beibehalten werden.

Es kann für die Testfälle der Datei verwendet werden. Es kann auch ein eigenständiger Server werden, bei dem der Bibliothekscode im Wesentlichen immer noch als Bibliothekscode ausgeführt wird, jedoch über IPC und nicht direkt verknüpft.

Für mich ist dies schlechte Praxis und spiegelt ein Problem im Build wider, bei dem der C-Programmierer kompetenter war als der Build-Ingenieur, der nicht herausfinden konnte, wie man die Komponenten ordnungsgemäß trennt. Eine Refaktorisierung ist erforderlich.

Bevor Sie entfernen, sollten Sie Folgendes beachten:

  • sind es Testfälle? (wenn ja, refaktorisieren Sie sie in ordentlichen Testcode)
  • wird RUN jemals irgendwo im System tatsächlich aktiviert? wenn ja, wo und warum; wenn nicht, ist es wahrscheinlich sicherer, es zu entfernen
  • Betrachten Sie #ifdef RUN #error als Möglichkeit, den Build abzubrechen, wenn es Sie überrascht zu erfahren, dass die Flagge manchmal definiert ist, oder #ifndef für das Gegenteil. Beachten Sie, dass ich gesagt habe "betrachten"; verstehen Sie bitte zuerst die Auswirkungen des Abbruchs des Builds.

1voto

sfrehse Punkte 1064

Zum Beispiel, wenn nur eine Bibliothek mit einer main-Funktion erstellt werden soll, die normalerweise keine main-Funktion erfordert. Die main-Funktion wird verwendet, um etwas zu testen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X