boolVariable = !! BoolVariable, was will der C++ Source mitteilen?

Ich staunte nicht schlecht, als ich die zwei ! Zeichen sah.  Was sollte das?

War das ein Versehen? Hat da jemand den not-Operators überladen?

Es waren immer Stellen wie diese:

bIsOpen = !!mPtr->openFile(….) ;

Nachdem ich das zum ersten Mal gesehen hatte, entdeckte ich die doppelte Verneinung an immer mehr Stellen, in dem C++-Source, den zu warten ich für dieses Jahr übernommen hatte.

Um 20005 herum war es einmal eine Art Richtlinie. Was für einen Sinn das wohl gehabt hatte?

Ich forschte nach und bekam Antworten und Ergebnisse, die mich dann doch überraschten.

Was sagten die aktiven Kollegen?

Eine Rundfrage an diverse verdiente Mitarbeiter musste her. Höflich fragen, kann man als neuer Mitarbeiter immer, wenn man richtig formulierte. So suchte ich eine Stelle im Source mit doppelten Verneinungen. Diese Stelle kopierte ich in die Email hinein. Am Anfang kam ein „hallo zusammen“, gefolgt von der Frage, nach dem Compiler, der not-not schneller konnte, als ist ungleich 0?

Die Ergebnisse waren unterschiedlich.

Einer verstand die Frage gar nicht und kommentierte die gesamte Stelle im Source. Er wollte direkt einen Punkt unter „technische Schulden” erstellen. Eine Andere leitete die Email weiter an ihre Leute. Diese kommentierten mit einem „nein so etwas, habe ich noch nie gesehen“. Damit wurde auch mein Name weitergereicht.

Ein verdienter, alter Projektleiter meinte: „Das sollte man machen, damit man von BOOL nach bool kommt.“

Keiner wusste etwas von einem Compiler, der mit not-not schneller lief.

Was antwortete Stackoverflow?

Was sollte ich damit anfangen? Dunkel erinnerte ich mich an einen Befehlssatz, bei dem Test auf ungleich 0 schneller war als der Test auf gleich 0. Vielleicht konnte meine Neugier mit einer Anfrage bei Stackoverflow gestillt werden.

Es war keine Frage des Befehlssatzes, sondern der kürzeste Weg um Warnungen bei der Typumwandlung loszuwerden. Eine bool Variable kann nur 0 und 1 speichern, während eine BOOL Variable ein Integer ist. Die Warnung meldet Datenverlust.

In der Tat sind zwei ‚!‘ Zeichen weniger als ein Vergleich mit TRUE:

bIsOpen = !!mPtr->openFile(….) ;

bIsOpen = mPtr->openFile(….) == TRUE;

Meine Reputation bei Stackoverflow stieg mit dieser Frage um 13 Punkte. Vielleicht sollte ich dort öfter vorbeischauen?

Was bedeutet das für mich?

Ein großer Teil 140 C++ Projekte wurde vor fünfzehn Jahren einmal in einen perfekten Zustand gebracht. Zu dieser Zeit gab es eine Art Schnitt in der Entwicklung. Die alten Sachen sollten noch laufen und langsam abgelöst werden. Die Änderungen, die danach kamen sehen geprägt nach Anbau und Notbehelf aus. Immerhin sollte dieses Produkt auslaufen. Was es aber nicht tat.

Später entdeckte ich noch die pragma(comment, lib) Statement, gefolgt von pragma(messages, ..), wenn ‚verbose‘ definiert war.

Damit diente das Übersetzungsprotokoll als Dokumentation der einzelnen Komponenten. Das war also der Grund, warum es keine Dokumentation der alten Sachen gab. Diese galten als selbstdokumentierend.

Meine Aufgabe fängt an, so richtig Spaß zu machen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert