Функцията main()

Всяка програма на езика C++ си има входна точка от която започва изпълнението на вашия код. Това е мястото в което операционната система ви предава управлението. Това става във функцията main(). В повечето случай компилатора изисква тази функция да върне число което определя резултата от изпълнението на вашата програма. Връщате 0, ако изпълнението е успешно. Или друга стойност, ако е възникнала някаква грешка.

Нека разгледаме един тривиален код на C++.

#include <iostream>
using namespace std;

int main() {
    cout << "Hello World" << endl;
    return 0;
}

Нека видим какво се случва ред по ред.


1. Това включва заглавния файл на входно – изходната библиотека на езика. Подробности и как работи ще разгледаме по нататък в уроците. За сега запомнете, че това е първия и задължителен ред от вашата програма.

Ред 2. Тази декларация казва на компилатора да третира всички функции и обекти от пространството с имена std като глобални. За сега ще го използваме, за улеснение. Иначе трябваше да напишем 5-я ред така:

std::cout << "Hello World" << std::endl;

Ред 4 е нашата функцията main(). Това е стандартен запис за всяка функция в C++. Редовете между къдравите скоби { … } се наричат изявления и представляват командите които нашата функция изпълнява. Всички те се изпълняват ред по ред и задължително завършват с точка и запетая. Ако я забравите компилатора ви ще измрънка.

5-я ред отпечатва текста „Hello World“ като го предава на стандартния изход на терминала (конзолата) чрез обекта cout (съкращение от „console output“). А endl просто е оператор добавящ нов ред.

Кода

int main() {
    .......
}

представлява декларация на функция която връща int (цяло число). Функцията се казва main. Между скобите задаваме входните параметри на функцията. Или нищо ако между тях е празно. Горното може да го напишем и по следния начин:

int main(void)

Думата void е запазена дума в езика. И означава точно, че там няма нищо. Празна декларация, празнота. По старите компилатори могат да ви позволят и един от следните записи. Но мисля, че новите стандарти на езика ги забраняват.

void main() ❌
void main(void) ❌

Ред 6-и може да бъде пропуснат. Това езика го позволява но само във функцията main(). В такъв случай на операционната система се връща код за успешно изпълнена програма. Тоест код 0.
Запазената дума return безусловно прекратява изпълнението на всяка функция и ако тя не връща нищо (void – декларация ред името на функцията) прост напишете „return;“

Сега нека да разгледаме възможните правилни варианти да декларираме функцията main(). Тя може да приема параметри зададени от операционната система.

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

Вече казахме, че в редове 1 и 2 функцията не приема параметри. Различното е в ред 3 и 4. Там main() приема два аргумента. Първия от тип int показва броя на параметрите с които е извикана вашата програма. А втория е масив от тип char съдържащ текстовите параметри с които програмата ви е извикана. Argc и argv може да са с различни имена. Но типовете трябва да с в същия ред и да съвпадат.

И накрая нека видим с какви аргументи е извикана вашата програма. Тя трябва да е компилирана в изпълним файл и да съществува на диска ви. Компилаторите и средите за разработка са различни при различните ОС. За различните среди за програмиране ще обясним в следващите уроци. И за това приемаме, че програмата ви е компилирана успешно и има следния вид:

#include <iostream>
using namespace std;

int main(int count, char* arguments[]) {
    for(int i =0; i < count; i++) {
        cout << arguments[i] << endl;
    }
}

В терминала на моята ОС. Отварям директорията (папката) където е изпълнимия ми файл и го извиквам така:

./a.out param1 param2 param3 param4 param5

Разделям параметрите с интервал. А програмата ми показва следния изход:

./a.out 
param1 
param2 
param3 
param4 
param5

Първия запис в масива от аргументи винаги е името на изпълнимия файл. Следват го самите аргументи. Този код използва цикъла for за да обходи масива arguments. Сигурно забелязахте, че първия елемент в масива е името на програмата. И че масива започва да се брои от нулевия елемент. Така работят всички масиви в C++. Ако стартирате програмата без параметри ще получите само това:

./a.out

Или там каквото е името на изпълнимия файл. Това е за сега. В следващия урок ще се потопим по надълбоко в езика.