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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2017, 17:34   #1
tutejshy
Форумчанин
 
Регистрация: 13.05.2017
Сообщений: 100
По умолчанию Функция main

Такой вопрос: как правильно записать функцию main? Всмысле в стандарте указано, что функция main является типа int, но не лучше ли ей возвращать void? Не лучше ли записать:
Код:
#include <stdio.h>

void main (void)
{
    returne;
}
При компилировании (если включить -Wall) выдает предупреждение, но чем все таки это отличается от return 0 в случае типа int?
tutejshy вне форума Ответить с цитированием
Старый 24.06.2017, 17:37   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от tutejshy Посмотреть сообщение
но не лучше ли ей возвращать void?
Лучше чем?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.06.2017, 17:44   #3
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

https://en.wikipedia.org/wiki/X86_ca...ventions#cdecl
Цитата:
Integer values and memory addresses are returned in the EAX
Т.о., если вы пишите void main - то как миниминимум не известно что возвращаете в виде кода ошибки системе (т.к. в EAX у вас последние результаты чего-то), т.к. система ожидает результат в любом случае.

Под WINE это хорошо видно, почти все виндовые игры, когда их просто выключаешь, заставляют playonlinux выбрасывать окно "что-то пошло не так" (а это просто void main(void)).

Кроме того, программы часто скриптуют, в баше можно включить - остановка при любой ошибке, соотв. ваш void main почти всегда будет прерывать скрипт.

Последний раз редактировалось alexzk; 24.06.2017 в 17:49.
alexzk вне форума Ответить с цитированием
Старый 24.06.2017, 17:58   #4
tutejshy
Форумчанин
 
Регистрация: 13.05.2017
Сообщений: 100
По умолчанию

Спасибо, весьма познавательно! И еще, раз на то пошло: часто в книгах можно увидеть запись int main() - когда в скобках ничего не указывается. Я гуглил эту тему и некоторые пишут, что подобная запись небезопасно, так как уязвима для взлома, мол: можно присвоить main любые аргументы...

Последний раз редактировалось tutejshy; 24.06.2017 в 18:06.
tutejshy вне форума Ответить с цитированием
Старый 24.06.2017, 22:06   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от tutejshy Посмотреть сообщение
так как уязвима для взлома, мол: можно присвоить main любые аргументы...
Не парьтесь, с этим проблем нет.
waleri вне форума Ответить с цитированием
Старый 25.06.2017, 00:05   #6
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от tutejshy Посмотреть сообщение
Спасибо, весьма познавательно! И еще, раз на то пошло: часто в книгах можно увидеть запись int main() - когда в скобках ничего не указывается. Я гуглил эту тему и некоторые пишут, что подобная запись небезопасно, так как уязвима для взлома, мол: можно присвоить main любые аргументы...
Смотря какой стандарт. В языке С пустые скобки = любое число аргументов, в С++ = void.
alexzk вне форума Ответить с цитированием
Старый 25.06.2017, 09:07   #7
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
что функция main является типа int, но не лучше ли ей возвращать void?
Компиляторы обязаны поддерживать только две версии main:
Код:
int main() {}
int main(int, char**) {}
всё остальное будет непереносимо и может не завестись.
Croessmah вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# Windows.Forms Программа содержит более одной указанной точки входа: "Program.Main()". Скомпилируйте с /main, чтобы указать тип Maray Windows Forms 6 06.04.2016 07:07
Разработайте программу, функция main() V_I_P Общие вопросы C/C++ 4 14.10.2013 16:21
функция генерации случайных чисел rand() в main pufystyj Общие вопросы C/C++ 4 08.02.2011 21:09
Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:9) elpilasgsm Помощь студентам 4 18.01.2011 08:23
Функция main и main(void) Pord Помощь студентам 1 11.12.2008 15:57