Часто начинают именно с "Hello world", но для нас это не подходит
В начале было слово. И слово было... «Hello, World!»
Нет, ну правда, сколько было куроводств с первым примером кода – вывести "Hello world!" на консоль!
#include <stdio.h> int main(void) { printf("Hello world"); return 0; }
– вот как-то так.
И, к слову, это "проклятье" тянется как раз с книги K&R "The C Programming Language". Загуглите – приятная книжка, прямо от авторов языка!
Тогда почему же мы начали со сложнейшей утилиты для Unix-like ОС, вместо простого "Hello world"?..
А чё такое "#include"? Рад, что ты спросил! Ведь за этим кроется просто бездна информации, отдельный язык программирования и целый препроцессор!
Про то, на сколько замечательный printf, я, скорее всего не расскажу в рамках этой книжки.
Невероятно, но факт – Ритчи и Керниган придумали язык над языком. Ещё до того, как компилятор начинает собирать код Си, запускается препроцессор, в задачах которого:
И скептик бы сказал, что это очередной костыль, чтобы это всё заработало, когда
стало большим... Так и есть! Однако именно благодаря препроцессору мы можем
подключить заголовочный файл работы с вводом-выводом (stdio.h
) и использовать
printf
.
К счастью, тогда костыли были зеленее, а небо голубее...
#include <stdio.h>
Как раз этой командой препроцессору мы говорим подключить заголовочный файл
stdio.h
для того, чтобы мы могли использовать функции (определённые в нём).
Например, оттуда мы можем получить printf
– уже знакомый вам по курсу ОС
(примечание для моих студентов, либо же вы можете найти этот курс на 900913.ru).
Также там есть функция puts
– положить строку на стандартный вывод.
Препроцессор Си – одно из средств упростить разработку на Си. Мы часто будем прибегать к нему. И рассмотрим подробнее позднее. А также напишем свои макросы и header файлы.
Традиционный (со времён K&R) стартовый пример кода:
#include <stdio.h> int main(void) { puts("Hello world"); return 0; }
Что происходит:
puts
). Параметром идёт строка, которую
хотим вывести.Собираем, запускаем:
→ clang hello-world.c -o hello_world → ./hello_world Hello world
Вот и мы научились великому навыку писать "привет мир"!