1

Тема: Нюанси С++

1 питання: Include <iostream> - використовується у кожній програмі?
2 питання: int main () {return 0;} чи void main () {}?
У різних джерелах по різному

Особисто я використовую int main ()

2

Re: Нюанси С++

1. Ні, тільки в тих, де є консольний ввід-вивід.
2. За стандартом в main не обов'язково писати return 0, але для уніформності багато хто пише.

Подякували: Joker1

3

Re: Нюанси С++

koala написав:

1. Ні, тільки в тих, де є консольний ввід-вивід.
2. За стандартом в main не обов'язково писати return 0, але для уніформності багато хто пише.

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

Подякували: Joker1

4

Re: Нюанси С++

Щодо 1 якщо  тобі потрібні функції для введеня виведення то пиши, а як ні то не потрібно.
Щодо 2 теж по ситуації. Якщо потрібно щоб програма повертала на зовні різні значення завершення роботи тоді int, а як ні то void

Подякували: Joker1

5

Re: Нюанси С++

Є легенда що лінуксі обов'язково тре писати int main () {return 0;), це правда?
return 0 в легенді тоже обов'язковий.

6 Востаннє редагувалося Singularity (12.07.2014 23:10:10)

Re: Нюанси С++

Ну дивись я спочатку компілюю програму і відразу запускаю її (main.bin)

Прихований текст

http://i.imgur.com/lAFUOA8.png

лінукс думає що там помилка через те що вона повернула 127 замість 0.

Коротше, треба писати бо буде помилка в деяких місцях.
Наприклад
➜   ./main.bin && ls -a
не спрацює бо перша команда завершилась з помилкой.

Подякували: Joker1

7 Востаннє редагувалося drWoZD (12.07.2014 23:09:20)

Re: Нюанси С++

Joker написав:

Є легенда що лінуксі обов'язково тре писати int main () {return 0;), це правда?
return 0 в легенді тоже обов'язковий.

Ну рекомендовано щоб прогавив щось повертала, але це не обов'язково.  Там по замовчуваню 0 повертається, якщо нічого нема. А взагалі в лінуксі частіше юзають exit(),  з ним пох на тип main. Назовні передасться число задане в параметрі

Подякували: Joker1

8

Re: Нюанси С++

Ну рекомендовано щоб прогавив щось повертала, але це не обов'язково.  Там по замовчуваню 0 повертається, якщо нічого нема. А взагалі в лінуксі частіше юзають exit(),  з ним пох на тип main.

Щось таке:

#include <iostream>
int main ()
{
exit ();
}

9 Востаннє редагувалося koala (13.07.2014 08:35:17)

Re: Нюанси С++

За стандартом вихід з функції main має бути еквівалентним виклику exit - не важливо, через return чи через останню }. А результат, якщо не вказаний - має бути 0.
Якщо бути точним, то

3.6.1.5 A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling std::exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing

return 0;
Подякували: Joker, leofun012

10

Re: Нюанси С++

1 якщо тобі не потрібно користуватись cin і cout (вхідним і вихідним потоком) як мінімум то ні
2 особисто я пишу void main() який сенс повертати значення з головної функції?

11 Востаннє редагувалося reverse2500 (27.07.2014 18:33:15)

Re: Нюанси С++

раз, два,три, чотири,пять, вийшов хакер погулять

return 0;

як раз важливо, вірніше, нічого страшного, компілятор сам все добавить але, писати код з return є ознакою хорошого тону програмування.
Далі, це означає що програма завершилась вдало і закриється нормально. В цей час, в регістр eax поміщається, 0 (всі ми знаєм про eax регістр і яку роль він відіграє в лінуксі, це щось регістр статусу для стекових програм, типу того), так що, return 0 правильно, return 1 ( в деяких випадках -1) це для надзвичайних ситуацій, для типу "файл не знайдено" і так дальше. Коли в регісті еах 1, тоді це означає, що помилка в завершені.
З.І. Вчіть ассемблер!

Подякували: 0x9111A, Joker, leofun013