2
bool SomeFunction()
{

}

我无法在我的机器上运行 Borland C++,但我需要从 C++ 转换为 VB,因此需要有关此功能的帮助。

4

3 回答 3

10

该函数声称它返回 abool但它什么也不返回。这应该会导致编译器警告。如果你用它来分配调用函数的东西,结果将是未定义的行为:

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

main()允许不显式返回,在这种情况下它隐式返回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。这意味着,寄存器的内容al将以bool x. 如果al为 0,x则为假,否则x为真。在我的系统上,这总是正确的,但这取决于上下文。此外,您可能会得到不同的调试和发布结果。

当然,结论是 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 回答