реклама
Бургер менюБургер меню

Зара Горенко – Мыслим на Си (страница 4)

18

bashgcc -S hello.c

Откройте файл hello.s – это ассемблерный код вашей программы. Он выглядит странно, но если приглядеться, вы увидите инструкции процессора: mov, call, ret.

Шаг 3: Ассемблирование

Ассемблер переводит ассемблерный код в объектный файл – почти готовую программу, но ещё не полную.

bashgcc -c hello.c

Появится файл hello.o – объектный файл. Если вы попытаетесь открыть его текстовым редактором, увидите бессмысленные символы – это машинный код.

Шаг 4: Линковка (компоновка)

Линкер (компоновщик) берёт ваш объектный файл и соединяет его с библиотеками – например, с кодом функции printf. Только теперь программа полностью готова.

Весь этот процесс выполняется автоматически, когда вы пишете gcc hello.c -o hello.

Часть 5: Эксперименты – изменяйте и ломайте

Помните, что сказал мне папа? "Ты можешь сломать его. Но это нормально. Так учатся".

Попробуйте изменить программу:

Эксперимент 1: Другой текст

cprintf("Меня зовут Зара. Я изучаю Си.\n");

Эксперимент 2: Несколько строк

cprintf("Первая строка\n");

printf("Вторая строка\n");

printf("Третья строка\n");

Эксперимент 3: Уберите \n

cprintf("Hello, World!");

Что изменится?

Эксперимент 4: Специальные символы

cprintf("Табуляция:\tвот так\n");

printf("Кавычки: \"текст в кавычках\"\n");

printf("Обратный слеш: \\\n");

Эксперимент 5: А теперь сломайте!

Уберите точку с запятой:

cprintf("Hello, World!\n")

Скомпилируйте. Что скажет компилятор?

Уберите фигурную скобку:

cint main() {

printf("Hello, World!\n");

return 0;

Уберите return 0;:

cint main() {

printf("Hello, World!\n");

}

(Это, кстати, сработает в новых версиях Си – стандарт C99 добавил неявное return 0; в конце main).

Читайте ошибки компилятора. Он говорит вам, где проблема. Он ваш учитель.

Часть 6: Философия первой программы

Когда Линус Торвальдс написал первую версию Linux, он начал с простейшей программы, которая просто выводила символ на экран. Не многозадачность, не файловые системы – просто "А" на экране.

Потом он добавил следующий символ. Потом – следующий. Шаг за шагом. Строчка за строчкой.

Сегодня Linux – это миллионы строк кода, работающие на миллиардах устройств. Но всё началось с одного символа.

"Hello, World" – это не просто учебная программа. Это философия. Начинай с малого. Проверь, что цепочка работает. Потом добавляй сложность.otvet.

В Unix есть принцип: "Делай одну вещь, но делай её хорошо". printf делает одно – выводит текст. Но делает это идеально.

Заключение главы

Вы написали свою первую программу. Вы скомпилировали её. Запустили. Изменили. Сломали. Починили.

Теперь вы знаете:

Что такое #include и зачем он нужен

Что такое функция main и почему она главная

Как работает printf

Что такое компиляция и как превратить код в программу

Почему return 0; означает успех

В следующей главе мы поговорим о переменных и типах данных. Мы научимся не просто выводить текст, а хранить информацию, изменять её, работать с ней.

Но прежде чем идти дальше, напишите ещё пять программ. Просто так. Пусть они выводят ваше имя, ваш возраст, ваше любимое число. Пусть они говорят что-то смешное или грустное.

Компьютер слушает вас. Говорите с ним.

Практическое задание:

Напишите программу, которая выводит ваше имя, возраст и любимую книгу. Каждая строка – отдельный printf. Скомпилируйте и запустите.

Потом измените код так, чтобы всё было в одном printf с символами \n для переноса строк.

Сохраните эту программу. Она – ваш первый шаг. Когда-нибудь вы посмотрите на неё и улыбнётесь: "С этого всё начиналось".

Часть 6 (продолжение Главы 1): Как подготовить компьютер к экспериментам

Компилятор – ваш переводчик

Прежде чем писать код, нужно понять: компьютер не понимает Си. Он понимает только машинный код – последовательности нулей и единиц, инструкции для процессора.

Компилятор – это программа, которая переводит ваш код на Си в машинный код. Без компилятора ваша программа – просто текст. С компилятором – это команды для процессора.

Мы будем использовать GCC (GNU Compiler Collection). Это свободный компилятор, созданный Ричардом Столлманом в рамках проекта GNU. На нём скомпилировано всё: от ядра Linux до программ на вашем Android-смартфоне.