NXT*_*NXT -6 c++ freebsd llvm clang llvm-clang
我最近开始使用 CLang 来编译嵌入式 C++ ARM 程序。
在此之前,我使用 GCC 和 C,几乎专门用于嵌入式工作。
我注意到当我有一个返回值的方法时,我忘记了 return 语句,程序核心转储。除了来自我的设备驱动程序之一的“msleep error -1”之外,没有打印任何错误。这是在 FreeBSD 上。
我希望忘记 return 语句只会导致函数返回垃圾,而不是核心转储。
编辑:我要返回一个布尔值,而不是指针或对象或任何复杂的东西。即使返回值无关紧要,程序也会崩溃。
到底是怎么回事?
例如:
bool MyClass::DummyFunc() {
<do some stuff and forget the return value>
}
Run Code Online (Sandbox Code Playgroud)
别处:
if(pMyObj->DummyFunc()) {
print ("Hey, it's true!\n");
} else {
print ("Darn, it's false!\n");
}
Run Code Online (Sandbox Code Playgroud)
无论返回值如何,该代码都不应崩溃。
来自二手资源,因为我不想为 C++ 标准付费,它显然说:
从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。
这是 C++,当你做一些未定义的事情时,你应该预料到它会导致你的计算机崩溃并吃掉你的衣服,除非实现另有说明。