bool SomeFunction()
{
}
我无法在我的机器上运行 Borland C++,但我需要从 C++ 转换为 VB,因此需要有关此功能的帮助。
该函数声称它返回 abool
但它什么也不返回。这应该会导致编译器警告。如果你用它来分配调用函数的东西,结果将是未定义的行为:
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;
}
如果您的编译器没有内置 bool ,那么您可以这样做:
typedef int bool;
#define true 1
#define false 0
int main(void)
{
bool answer;
answer = true;
while(true)
{
}
return 0;
}