Borland C++ 这个布尔函数返回什么
Borland C++ What wil this bool function return?
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;
}
相关文章:
- 从函数返回const char*数组
- 检查函数返回类型是否与STL容器类型值相同
- 从 c 或 cpp 系列子函数返回到主函数
- 从函数返回任意简单类型的数据
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 从 C++ 中的函数返回数组地址问题
- VirtDisk.h QueryChangesVirtualDisk() 函数返回 RangeCount 为 0
- 为什么glGetSubroutineIndex为不同的函数返回相同的值?
- 在 c++ 中将函数返回类型指定为模板参数
- 从封装在对象中的函数 C++ 返回时为空的列表
- 为什么向量内部的指针在从函数返回时会发生变化?
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 寿命延长从函数返回引用
- 程序不向函数返回值
- 字符串函数返回奇怪的值
- 类的大问题,以及从空函数c++返回
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- C++二叉搜索树模板从函数返回节点
- NVCC 错误:string_view.h:constexpr 函数返回是非常量