каково возвращаемое значение функции, которая возвращает int, но ничего не возвращает явно. например вывод - PullRequest
1 голос
/ 09 ноября 2011
int fun()
{
 printf("\ncrap");
}


void main()
{
  printf("\n return value of fun %d", fun());
}

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

Ответы [ 3 ]

3 голосов
/ 09 ноября 2011

fun триггеры неопределенное поведение .

Пожалуйста, всегда компилируйте со всеми включенными предупреждениями компилятора . Это должно дать вам предупреждение, что вы совершаете эту самую ошибку.

Ваш main также вызывает неопределенное поведение, потому что стандарт C ++ требует, чтобы была только одна единственная функция с именем main, и она возвращала int. Тем не менее, вам разрешено, как особый случай, опускать оператор return в вашей (исправленной) функции main.

«Стек», как вы предполагаете, не является частью языка C ++. Но это не имеет значения; Стандарт гласит, что возвращаемый объект создается в области действия вызывающей стороны, и это все, что вам нужно знать.

(Практически, невозвращенный int, вероятно, будет заканчиваться как неинициализированная переменная типа int, но стандарт говорит, что вызов функции уже вызывает неопределенное поведение, а не просто доступ для чтения позже.)

2 голосов
/ 09 ноября 2011

Поскольку это зависит от архитектуры, нет ничего общего.

Однако можно допустить, что значение, вычисленное последним, или возвращаемое значение из последней вызванной функции может быть возвращено . Но, в конце концов, это неопределенное поведение . Если вы хотите на это положиться ...

Обратите внимание, что для int main() существует специальный случай. (Кстати: void main() не является стандартным.) Если оператор return отсутствует, он возвращает 0.

2 голосов
/ 09 ноября 2011

Это неопределенное поведение. Все может случиться.

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