Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2013, 21:44   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию Вопрос на счет возвращаемого значения функции main()

Здравствуйте!
Недавно узнал, что выполнение программы может рухнуть, если функция main() не будет возвращать int.
Слышал, что это связано с регистрами... но, не совсем понял как.
Проясните, пожалуйста
Igor95 вне форума Ответить с цитированием
Старый 24.09.2013, 22:46   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Здравствуйте!
Недавно узнал, что выполнение программы может рухнуть, если функция main() не будет возвращать int.
Слышал, что это связано с регистрами... но, не совсем понял как.
Проясните, пожалуйста
Выполнение программы не может рухнуть из-за то, что функция main не возвращает int.

Это связанно с тем, что функция main в принципе не может не возвращать int.

Она всегда возвращает int, даже если её прототип был описан как:
Код:
void main()  //microsoft specific
{
    //по завершению вернет 0
}
По стандарту, функция main обязана возвращать int.
И даже если не написать return, компилятор сам сгенерирует код возвращаемого значения:

Код:
int main() 
{
    //по завершению вернет 0
}
_Bers вне форума Ответить с цитированием
Старый 24.09.2013, 23:15   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

т.е компилятор автоматически проследит.. спасибо
Igor95 вне форума Ответить с цитированием
Старый 25.09.2013, 01:51   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
т.е компилятор автоматически проследит.. спасибо
Существует правило: сомневаешься? Либо проверь и убедись, либо пиши так, что бы сомнения не возникали.

Возможно, ваш источник информации имел ввиду немножко другую проблему:

У функций, которые возвращают значения существуют эффекты:

Код:
int Foo(const val)
{ 
   const int result = val*val;
   //<--- ничайно забыли написать return result;

   //<--- что вернет функция?
}
По стандарту это UB. То есть "не определенное поведение". Или иначе: "на усмотрение конкретного компилятора".

Компилятор Гцц вам вернет мусор.
Можно поднять уровень тревоги специальными ключиками компиляции, и тогда гцц сгенерирует предупреждение.

Компилятор вижал студии заметит, что функция в принципе ничего не возвращает, хотя и должна, и поднимет тревогу: ошибка времени компиляции

Усложним ситуацию:

Код:
int Foo(const val)
{ 
     if(val==0) return val*val;

   //<--- значение возвращается не во всех возможных случаях

   //<--- что вернет функция?
}
С гцц ситуация аналогична, а компилятор от вижал студии сгенерирует предупреждение. Но ошибки компиляции уже не будет.

Функция main всегда возвращает значение.
Если программист явно не задал его, вернется ноль.
_Bers вне форума Ответить с цитированием
Старый 25.09.2013, 02:31   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Вот, нашел еще объяснение:
http://www.eskimo.com/~scs/readings/...in.960823.html
Igor95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тип возвращаемого значения при перегрузке операторов Igor95 Общие вопросы C/C++ 1 22.04.2013 23:02
тип возвращаемого значения не соотвецтвует типу функции Мария1111 Помощь студентам 1 16.11.2012 12:50
Получить текст возвращаемого значения вместо кода sectors70 Win Api 5 16.09.2012 00:23
Использование строки в типе возвращаемого значения. kuy Общие вопросы C/C++ 7 13.05.2012 11:42
тип возвращаемого значения функции sqrt SAMOUCHKA Помощь студентам 2 20.09.2011 19:00