2
bool SomeFunction()
{

}

私のマシンでは Borland C++ を実行できませんが、C++ から VB に変換する必要があるため、この機能について助けが必要です。

4

3 に答える 3

10

関数は a を返すと主張していますが、bool何も返しません。これにより、コンパイラの警告が発生するはずです。関数を呼び出す何かに割り当てるために使用すると、結果は未定義の動作になります。

bool b = SomeFunction(); // UB, SomeFunction is failing to return.
SomeFunction(); // still undefined behaviour

Onlymain()は明示的に返さないことが許可され、その場合は暗黙的に を返します0

ここを参照してください:

§6.6.3/2:

関数の最後を流れることは、値を持たない戻りと同じです。これにより、値を返す関数で未定義の動作が発生します。

于 2012-11-20T12:31:08.830 に答える
1

Borland XE2 で次のコードをコンパイルしました。

bool SomeFunction()
{
}

int main()
{
    bool x = SomeFunction();
    // ...
}

SomeFunction()次の x86 アセンブラー コードに変換されます。

push ebp
mov ebp,esp
pop ebp
ret

割り当ては次のようにmain()翻訳されます。

call SomeFunction()
mov [ebp-$31],al

の場所[ebp-$31]はどこですかx。つまり、 register の内容は にalなりbool xます。al0 の場合はxfalse になり、それ以外の場合xは true になります。私のシステムでは、これは常に当てはまりましたが、これはコンテキストによって異なります。また、デバッグとリリースで異なる結果が得られる場合があります。

結論は、もちろん、x は未定義です。与えられたコードは、書くのと少し似ています

bool x;
if (x)
{
    // ...
}

SomeFunction()の定義は、コンパイラの警告だけでなく、エラーも発生させるべきだと考える傾向があります。Visual C++ はそうしていますが、他のコンパイラについては知りません。

于 2012-12-20T11:23:04.400 に答える
-1

return true; または_ return false;

bool SomeFunction()
{

    return true;

    // or

    return false;

}

コンパイラに bool が組み込まれていない場合は、次のようにすることができます。

typedef int bool;
#define true 1
#define false 0

int main(void)
{

    bool answer;
    answer = true;

    while(true)
    {

    }

   return 0;
}
于 2012-11-20T12:44:34.277 に答える