Недавно я начал использовать CLang для компиляции встроенных программ C++ ARM.Почему моя программа на C++ сбой, когда я забываю оператор return, а не просто возвращаю мусор?
До этого я использовал GCC и C, почти исключительно для встроенных работ.
Я заметил, что когда у меня есть метод, который возвращает значение, и я забыл оператор return, ядро программы сбрасывает. На одном из драйверов устройства нет ошибки, кроме «msleep error -1». Это на FreeBSD.
Я бы ожидал, что забывание оператора return приведет к возврату мусора из функции, а не к дампу ядра.
EDIT: Я возвращаю bool, а не указатель или объект или что-то сложное. Программа вылетает, даже если возвращаемое значение не имеет значения.
Что происходит?
т.д .:
bool MyClass::DummyFunc() {
<do some stuff and forget the return value>
}
В другом месте:
if(pMyObj->DummyFunc()) {
print ("Hey, it's true!\n");
} else {
print ("Darn, it's false!\n");
}
Этот код не должен врезаться, независимо от возвращаемого значения.
Вы должны подумать о компиляции с использованием -Wall или -Wreturn-type, если вы склонны совершать такую ошибку. – kfsone