2017-07-08 23 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,并将工作相同。 –