【发布时间】:2011-03-28 10:50:39
【问题描述】:
我最近写了一个帖子:
Weird Error in C++ Program: Removing Printout Breaks Program
...我试图解决一个看似令人费解的问题,其中删除 cout 语句会破坏我的程序。
事实证明,我的问题是我忘记返回我后来用于逻辑的真/假成功标志。
但显然有些东西被退回了,如果我把那个 cout 留在里面,那东西总是正确的,但当我把它拿出来时,似乎“神奇地”变成了假。
我的问题是:
当函数内没有执行返回命令时,什么决定了 c++ 函数返回什么?有什么逻辑吗?
显然忘记返回类型是个坏主意。不过,在这种情况下,这主要是由于我的程序的性质——一个快速的 hack 工作。后来我决定不值得努力实现一个算法来确定函数调用的成功/失败——但不小心留下了依赖于返回的代码。
编译可执行文件时,g++ 没有给我任何警告或错误,如下所示:
g++ main.cc -g -o it_util
我的版本是: g++ (GCC) 4.1.2 20080704(红帽 4.1.2-44)
再次,为了避免其他人在犯同样愚蠢的错误并遇到同样看似不稳定的行为时感到沮丧,谁能阐明没有返回的函数从哪里获得返回值??
谢谢!!
【问题讨论】:
-
如果使用
-Wall标志编译会发生什么? -
我猜
eax上发生了什么? -
返回值是特定于机器/架构的。如果您举报您使用的操作系统/计算机/编译器组合(32 位/64 位)以及预期返回值的类型(int、结构、指针、浮点),那么有人可能会在这里帮助您。问候 rbo
-
好点,尼尔。当我打开 -Wall 标志时,我收到警告
main.cc:278: warning: control reaches end of non-void function,所以我猜 g++ 确实 会警告我,但默认情况下只是关闭该警告。我想我应该记得下次使用那个标志,嗯? -
@Jason 你应该设置你的环境,以便每次都使用 -Wall - 可能也添加 -Wextra 和 -pedantic。这些将为您节省大量时间。
标签: c++ memory return-value return