2017-07-08 19 views
-1

私は以下のコードを持っていますが、それが== TRUE!= FALSEであるかどうかはわかりません。WinAPI 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

ウィンドウで 'TRUE'は1、' FALSE'は0なので、あなたが考えている両方の方法が同じです – bruceg

+3

'TRUE'は1かもしれませんが、ほとんどの' BOOL'関数は非ゼロ成功すれば、特に1ではなく、 '!= FALSE'を使用するのが最適です。この場合、0以外の値は 'bool'に代入されると' true'に変換されるので、Jerryの回答表示のように値を比較しないでください。 –

+0

@ThomasMccaffery:この例題の関数を1行のコードに減らすことはできますか? 'void AttachConsole(){has_console_attached_ = :: AttachConsole(ATTACH_PARENT_PROCESS); } ' –

答えて

3

戻り値は、失敗した場合は0、成功した場合は0以外の値として記載されています。

そうです、あなたは!= FALSEを使用することができますか、あなただけ使用できます。boolにBOOL(実際には整数)からの変換がfalseに0を変換します

bool has_console = ::AttachConsole(ATTACH_PARENT_PROCESS); 

、およびtrueに何かが--exactly何あなたは欲しい。

+0

私はアナライザーを使っているので混乱していました。それをクリアしていただきありがとうございます。事実、私は== TRUEを取り除くことができ、同じように動作します。 –