2017-07-08 6 views
-1

Ich habe den folgenden Code und ich bin mir nicht sicher, ob es == TRUE oder != FALSE sein sollte.WinAPI AttachConsole?

Dies ist der Code jetzt:

void AttachConsole() { 
    bool has_console = ::AttachConsole(ATTACH_PARENT_PROCESS) == TRUE; 

    if (!has_console) { 
     // We weren't launched from a console, so just return. 
     // We could alloc our own console, but meh: 
     // has_console = AllocConsole() == TRUE; 
     has_console_attached_ = false; 

     return; 
    } 

    has_console_attached_ = true; 
} 

Ich denke, es != FALSE sein sollte, aber ich bin mir nicht sicher?

+0

in Windows, 'TRUE' ist 1 und' FALSE' ist 0, also beide Möglichkeiten, die Sie denken, sind die gleichen – bruceg

+3

'TRUE' kann 1 sein, aber die meisten' BOOL' Funktionen sind dokumentiert als Rückgabe ungleich Null auf Erfolg, nicht 1 spezifisch, also am besten '! = FALSE'. In diesem Fall wird jeder Wert ungleich Null in "true" konvertiert, wenn er einem 'bool' zugeordnet wird, also vergleichen Sie den Wert überhaupt nicht, wie Jerrys Antwort zeigt. –

+0

@ThomasMccaffery: Wissen Sie, dass diese Beispielfunktion auf eine einzige Codezeile reduziert werden kann? 'void AttachConsole() {has_console_attached_ = :: AttachConsole (ATTACH_PARENT_PROCESS); } ' –

Antwort

3

Der Rückgabewert wird nur als 0 für einen Fehler oder nicht als Null für den Erfolg dokumentiert.

Also ja, könnten Sie != FALSE verwenden, oder Sie können einfach verwenden:

bool has_console = ::AttachConsole(ATTACH_PARENT_PROCESS); 

Die Konvertierung von BOOL (wirklich eine ganze Zahl) zu bool konvertiert 0-false, und alles, was zu true --exactly was Sie wollen.

+0

Ja, ich war verwirrt, weil ich einen Analysator verwendet habe und gesagt werden sollte! = FALSCH. Danke, dass du das geklärt hast. In der Tat kann ich das == TRUE entfernen und wird das gleiche funktionieren. –