2017-07-08 51 views
-1

我有以下代碼,我不確定它應該是== TRUE還是!= FALSEWinAPI AttachConsole?

這是現在的代碼:

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; 
} 

我覺得應該是!= FALSE,但我不知道?

+0

在windows中,TRUE是1且FALSE是0,所以你所考慮的兩種方法是相同的 – bruceg

+3

TRUE可能是1,但是大多數BOOL函數被記錄爲返回非零在成功的時候,不是特別的,最好使用'!= FALSE'。在這種情況下,任何非零值在分配給「bool」時都會轉換爲「true」,所以根本不要比較這個值,就像Jerry的答案所示。 –

+0

@ThomasMccaffery:你知道這個例子的功能可以簡化爲一行代碼嗎? 'void AttachConsole(){has_console_attached_ = :: AttachConsole(ATTACH_PARENT_PROCESS); }' –

回答

3

返回值僅記錄爲0表示失敗,非0表示成功。

所以,是的,你可以使用!= FALSE或者你可以只使用:

bool has_console = ::AttachConsole(ATTACH_PARENT_PROCESS); 

來自布爾(真的是一個整數)的bool轉換將別的轉換0到false,並true --exactly什麼你要。

+0

是的,我很困惑,因爲我使用了一個分析器,說應該是!= FALSE。謝謝你清理那個。事實上,我可以刪除== TRUE,並將工作相同。 –