Функция, объявленная для возврата int, ничего не возвращает. Это неопределенное поведение? - PullRequest
6 голосов
/ 03 ноября 2010

Это допустимая функция в C ++:

int f()
{
   if(false)
   {
      return 42;
   }
}

Следующее определение вызывает UB:

int x = f(); //return value used

Вопрос: Следующее выражение выражение вызывает UB?

f();

Цитата из стандарта будет очень приветствоваться. Спасибо

Предупреждение: Замечания по стилистике не имеют значения:)

Ответы [ 2 ]

8 голосов
/ 03 ноября 2010

C ++ 03 §6.6.3 / 2:

Выход из конца функции эквивалентен возврату без значения; это приводит к неопределенному поведению в функции, возвращающей значение.

Так что это UB в самой функции.

Кстати, gcc предупреждает вас об этом UB:

In function 'int f()':
Line 7: warning: control reaches end of non-void function
3 голосов
/ 03 ноября 2010

C ++ 03, §6.6.3 / 2: «Выход из конца функции эквивалентен возврату без значения; это приводит к неопределенному поведению в функции, возвращающей значение.»

Обратите внимание, что то же самое не верно для C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...