Найти тему
D21nk Master

Функция main по фен шую

Что ж,мы знаем как вывести более подробную информацию об ошибках,но совершенно не ясно как это работает.Так же,если вы ранее работали на каких-то либо других языках программирования-то наверняка обратили внимание,что многие из них запрещают использовать тип void для функции main.В c++ вовсе принимает только int.Почему так? Сейчас объясню.

Сперва разберёмся как всё устроено с этим механизмом ошибок.Когда программа ОС сталкивается с каким-то противоречием-она устанавливает в переменную errno под linux и ERRNO под windows код ошибки.Нам остаётся лишь сопоставить код ошибки и вывести соответствующую строку.

Конечно же,как и в любом другом моём уроке у нас будет практика,без неё никуда,потому как только практика закрепляет знания.Мы тут не бездумно информацию поглощать собрались.Практиковать как раз будем этот самый механизм,написав свой велосипед.

Для этого нам понадобится пара библиотек под linux,а именно errno и string,под windows будет достаточно windows.h.

//не забудьте подключить библиотеки

//напишем свой обработчик

void errshow(char *msg)

{

//напечатать наше сообщение

//после перевести номер ошибки в строку

printf("%s:%s\n",msg,strerror(errno));

exit(1);

}

int main(int argc,char *argv[])

{

FILE *file=fopen(argv[1],"r");

if(file==NULL)

errshow("Can't open file");

return 0;

}

Всё просто,мы используем функцию strerror из библиотеки string,а переменную,в которой хранится код ошибки используем как аргумент.

Теперь поговорим о том,почему мы с этого урока будем использовать тип данных int для функции main,вместо void.

Любая серьёзная программа после того,как отработает-как правило возвращает какое-то число.Число сообщает системе,как программа отработала.Ноль-значит всё хорошо,любое другое отклонение-значит произошла ошибка.Потому мы и передавали 1 в функцию exit.

Ваши программы уже имеют функционал,который легко передаётся в другие программы.Коды ошибок помогут выяснить на каком этапе произошёл сбой и почему.

Домашним заданием предлагаю вам написать небольшую игру по угадыванию вами числа:

Программа загадывает число от 1-100

Пока число пользователя не равно числу

Если число пользователя больше

Вывести слово "Больше"

Иначе если число пользователя меньше

Вывести слово "Меньше"

Сообщение об победе

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

С вами был D21nkMaster.Всего доброго!