Урок 1. «Hello, World» (#include, puts, printf, return) | Убунту Линукс

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

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

1
2
3
4
5
6
7
/*Наша первая программа на Си*/
#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.

1
2
3
4
5
6
7
/*Меняем 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:~$

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

1
2
3
4
5
int main ()
{ puts ("Hello,","ubuntuforlife.ru"); return 0;
}

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

1
2
3
4
5
6
7
#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 то без библиотеки его никак не получится скомпилировать.

На сегодня думаю хватит. Удачи!