Функция с отсутствующим возвратным значением, поведение во время выполнения
Как и ожидалось, компилятор (VisualStudio 2008) даст предупреждение
предупреждение C4715: «doSomethingWith»: не все пути управления возвращают значение
при компиляции следующего кода:
- Смешивание не удаляет швы в OpenCV
- Visual Studio 2015 чрезвычайно медленная
- Моно https webrequest завершилось с ошибкой «Ошибка аутентификации или дешифрования»
- Производительность LINQ Any vs FirstOrDefault! = Null
- Статические и экземпляры с тем же именем?
int doSomethingWith(int value) { int returnValue = 3; bool condition = false; if(condition) // returnValue += value; // DOH return returnValue; } int main(int argc, char* argv[]) { int foo = 10; int result = doSomethingWith(foo); return 0; }
Но программа работает отлично. Возвращаемое значение функции doSomethingWith () равно 0.
Является просто неопределенным поведением или существует определенное правило, как результат / результат вычисляется во время выполнения. Что происходит с не-POD-типами данных как возвращаемое значение?
- Является ли main () действительно началом программы на C ++?
- Как получить общеansible IP-адрес пользователя в C #
- Как перемещать курсор или имитировать клики для других приложений?
- Буквенно-цифровая сортировка с использованием LINQ
- Аспектно-ориентированное программирование (AOP) для C # (.Net) и их функций
- Запуск процесса с учетными данными из службы Windows
- Параметры сопоставления CSV с .NET
- C конструкция государственного аппарата
Неопределенное поведение, указанное в стандарте ISO C ++, раздел 6.6.3:
Вытекание конца функции эквивалентно возврату без значения; это приводит к неопределенному поведению в возвращающей значение функции.
Для процессоров x86 стандартное соглашение о вызове помещает возвращаемое значение в регистр EAX. Практически это означает, что для большинства компиляторов, если мы дойдем до конца функции без возврата, результат последней математической операции будет возвращен. Однако вы не можете полагаться на него, и он не переносится.
Не возвращать значение из функции возврата значения приводит к неопределенному поведению.
Обновление ответа @piotr.
Из Стандартной секции C ++ 17 9.6.3
Вытекание конца конструктора, деструктора или функции с возвратным типом cv void эквивалентно возврату без операнда. В противном случае, выключение конца функции, отличной от главной (6.6.1), приводит к неопределенному поведению.