Borland C++ 这个布尔函数返回什么

Borland C++ What wil this bool function return?

本文关键字:函数 返回 什么 布尔 C++ Borland      更新时间:2023-10-16
bool SomeFunction()
{
}

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

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

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

只允许main()不显式返回,在这种情况下,它会隐式返回0

看这里:

§6.6.3/2:

从函数末尾流出等效于没有值的返回;这会导致值返回函数中出现未定义的行为。

我在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++这样做,我不知道其他编译器。

它应该return true;return false;

bool SomeFunction()
{
    return true;
    // or
    return false;
}

如果您的编译器没有内置布尔值,那么您可以这样做:

typedef int bool;
#define true 1
#define false 0
int main(void)
{
    bool answer;
    answer = true;
    while(true)
    {
    }
   return 0;
}