Heresy празнота главната (), използвайте функцията основните

Ако присвоите главната () функция вида връщане различна от вътр, компилаторът през предходната C99 компилатор, можете да получите неопределено поведение на програмата. Компилаторът C99 ще получите неопределена поведение ако е така, казва версия на изпълнение, или неопределен поведение - ако това не е така. Вярваш ли на вашата програма в това отношение?







5.1.2.2.1. Стартирайте програмата. Feature, стартирате програмата, наречена основна (първична). Изпълнението декларира не прототип за тази функция. Тя трябва да бъде определена от връщането на тип Int без параметри:

или с два параметъра (тук те се наричат ​​argc и argv, макар имена могат да бъдат използвани в реда, в който те са поставени във функцията, в която обяви):

Int основна (междинно argc, знак * argv [])

или някаква друга реализация дефиниран начин. "

5.1.2.2.3. Приключване на програмата. Ако основната функция на типа на връщане е вид, който е съвместим с вътр, връщането към основната функция е еквивалентна на обадите на изхода на функцията със стойността, върната от основната функция като свой аргумент; когато скобите>, който допълва основната функция връща стойност от 0. Ако типът на връщане не е съвместим с типа на вътр, статус завършване се завръща в приемащата околна среда е неопределена. "

В този контекст "неопределена" означава, че стандартът не изисква специфично поведение от компилатора, който е свободен да се върне в приемащата среда (обикновено една операционна система), който и да е държава, това, което той обича, и тя се прилага само ако се установи, документите относно осъществяването на че подкрепя връщането на основните () видове, различни от вътр. Ако имате празен (свободен) Основната функция основната () и пишете код за ядрен реактор или военен самолет, може да се почувствате леко колебание, и аз не те обвинявам. В допълнение, определянето на основната () за типа на връщане на невалидни (празно) не е синтактична грешка или нарушение на ограниченията, така че компилаторът не трябва да екстрадира диагностично съобщение.







Нека да разгледаме по-от различен ъгъл. Помислете за четвъртия довод на qsort на сортиране функция. Той уточни, указател към някои сравнение функция, която използва като аргументи две константи на типа Конст отпада и INT типа замяна. qsort функция извиква функцията сравнение и да използва неговото връщане стойност да се определи връзката между два обекта в масива, която е да бъдат сортирани. И така, какво се случва, когато ти пиша сравнение функция като този?

невалидни CompInts (Конст нищожен * пл, Конст нищожен * p2)
конст * Int NL = пи;
конст Int * n2 = p2;
вътр разл;
ако (* NL> * n2)
разл = 1;
иначе, ако (* NL == * n2)
разл = 0;
още
разл = 1;
>

Излишно е да казвам, нали? В qsort функция няма начин да получите информацията, тя се нуждае. Не можете да определите функции за сравняване на прототип - ще трябва да се изхвърли на правилата, отнасящи се до qsort функция, ако искате да направите тази функция правите това, което се очаква от него.

Добре, обратно към основната функция (). Налице е една и съща ситуация. Вие не сте отговорни за магистрален определение интерфейс (). За това е на обаждащия се. Кой призовава главния ()? Това не е ли (макар че всъщност можете, ако искате да се обадите главната (), точно както може, ако искате да се обадите сравнение функцията си на qsort). Но основният "клиента" главната () функция е да стартирате кода. Както Стартовият код, ще определи дали програмата е успешно, ако не му кажеш за това? Това обаждане е "седнал" някъде дълбоко в червата на системата (тук аз го опрости малко):

Int returnstatus;
returnstatus = основна (argc, argv);


Ако "опустошен" Основната функция () ще бъде на някои интересни особености:

  • Програмата може да работи точно така, както се очаква.
  • returnstatus може да получите в капан и да предизвика катастрофа на програмата (или целия компютър).
  • стартиращ код може да изпрати фалшив код за връщане на операционната система, която след това реши да се върнем назад сделката на базата данни, защото програмата не се върна очакваната стойност.
  • И това е най-лошото от всичко - тичам код извън обсега на носа си и да започне да се извлече от това на демоните. (Demon (Demon) - процедура се стартира автоматично при определени условия, и се характеризира с непредвидимото поведение -. Имайте предвид, научно изд ...).

Основна функция () връща вътр. Има само три стойности на прехвърляне към други платформи, можете да се върнете от главната ():

Последните две са определени в , и техните реални стойности варират в зависимост от конкретната система. (С други думи, не гледайте на тези ценности в библиотеката и да ги прехвърлите на програмата.)

Ако се върна на 0, Стартовият код ще покаже на операционната система или други среди домакини, че програмата ви е успешна, превод 0, ако е необходимо, на различна стойност.

Броят на аргументи от основните функцията ()

В действителност, функцията може да се определи чрез определяне на изпълнението. Следователно, като определяне на основната, както

Int основна (междинно argc)