Ошибка объявления в C с возвращаемым значением - PullRequest
0 голосов
/ 03 марта 2019

Есть ли причина, по которой такое объявление неправильно в C?

short foo()
{
   short x,y,z;
   y=24;
   z = x + y;
   return z; 
}

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Декларации не ошибочны per se , но есть проблемы с кодом:

  • В современном C short foo(void) предпочтительнее, чем short foo().Первый говорит, что функция не принимает параметров.Последнее оставляет его гибким, что связано с рядом проблем, которые могут привести к появлению ошибок.
  • В z = x + y;, x не было присвоено значение.Поведение кода тогда не определено.(Это связано со специальным правилом, согласно которому при использовании объекта с автоматическим сроком хранения, которому не было присвоено значение и не был получен его адрес, поведение не определено стандартом C.)
0 голосов
/ 03 марта 2019

Возвращаемое значение z будет неопределенным поведением, потому что вы не инициализируете значение переменной x в этой функции.Возвращаемое значение этой функции будет несовместимым, иногда оно будет 24, иногда это будет другое значение.

...