Урок 1. «Hello, World» (#include, puts, printf, return)

Всем привет. Начнем наш первый урок. Начинать изучение программирования с вывода информации «Привет, Мир» стала уже традицией. И мы так же поступим.

Создадим файл main1.c где вам удобно, например на рабочем столе. Откройте файл в текстовом редакторе. Наберите следующий код (советую вам не копировать, а написать вручную, чтобы лучше запомнить):

/*Наша первая программа на Си*/
#include 
 
int main () {
puts ("Hello, World!");
return 0;
}

Теперь давайте рассмотрим каждую строку по отдельности. Здесь в первой строке комментарий помещенная в скобки /* */. При компиляции компилятор не обращает внимания на комментарии. Комментарии используется что бы не забыть что за программа или какую функцию выполняет. Так же комментарии используются в случаи если над проектом работают и другие лица кроме вас.
Компилятор — это программа которая переводит исходный код понятный человеку, в код понятный машине (компьютеру). Процесс перевода называется компиляция.
А вторая строка это препроцессорная директива которая подключает библиотеку в которой содержится функции puts, return, printf и другие. Во время компиляции, компилятор вставит туда текст из библиотеки .

int main () — это тело программы с которой начинаются все программы на Си. В программе не может быть более одной функции main.

puts и return — это операторы которые описаны в . Puts используется для вывода информации в поток stdout (stdout — по умолчанию настроен на экран, то есть информация выводится на монитор). А return (переводится как определять) завершает исполнение программы и возвращает нулевое значение в среде исполнения. Использование оператора return обязательна, иначе программа «зависнет» в памяти компьютера.

Ну давайте скомпилируем же нашу программу. Для этого сохраните внесенные изменения. Откройте терминал (Ctrl+Alt+T). Выполните следующую команду:

gcc -o [имя выходного файла] '[путь к компилируем файлу]'

Запускаем:

./[имя выходного файла]

Например:

gcc -o prog '/home/ubuntuforlife/Рабочий стол/main.c'

Запуск:

./prog

Увидим следующий результат:

Hello, World!

Поздравляю, вы написали и скомпилировали первую программу.

Попробуйте заменить оператор puts на printf.

/*Меняем puts на printf*/
#include 
 
int main () {
printf ("Hello, World!");
return 0;
}

Сохраните и скомпилируйте. Результат будет тем же. Но эти два оператора отличаются, и чем же рассмотрим в дальнейшем.

Теперь проведем небольшой эксперимент. Удалим из исходника (это файл с кодом программы, в нашем случаи main.c) препроцессорную директиву #include и скомпилируем любую из наших двух программ. В первом случаи результат не изменится, а во втором вылетит ошибка:

nadir@nadir-VGN-TT1RVN-X:~$ gcc -o prog '/home/nadir/Рабочий стол/main.c'
/home/nadir/Рабочий стол/main.c: В функции «main»:
/home/nadir/Рабочий стол/main.c:3:5: предупреждение: несовместимая неявная декларация внутренней функции «printf» [по умолчанию включена]
nadir@nadir-VGN-TT1RVN-X:~$

Так зачем нам нужен заголовочный файл ? В этом файле приведены описания и определения для правильного использования тех функций стандартной библиотеки, которые нужны для ввода и вывода. Но ведь программа компилируется и работает так, как нужно. Для того чтобы доказать, что нужно подключать библиотеку рассмотрим следующие два примера. С подключенной библиотекой и без:

int main ()
{
    puts ("Hello,","ubuntuforlife.ru");
    return 0;
}

И второй вариант:

#include 
 
int main ()
{
    puts ("Hello,","ubuntuforlife.ru");
    return 0;
}

В первом случаи все пройдет без ошибок, но на экран будет выведен текст только из первых кавычек. Вторых кавычек быть не должно, это ошибка. Но компилятор нам этого не «сказал».

А во втором случаи компилятор прервал процесс из-за ошибки в исходном коде:

nadir@nadir-VGN-TT1RVN-X:~$ gcc -o prog '/home/nadir/Рабочий стол/main.c'
/home/nadir/Рабочий стол/main.c: В функции «main»:
/home/nadir/Рабочий стол/main.c:5:5: ошибка: слишком много аргументов в вызове функции «puts»
nadir@nadir-VGN-TT1RVN-X:~$

Так что не забывайте подключать библиотеку. А что касается оператора printf то без библиотеки его никак не получится скомпилировать.