Зара Горенко – Мыслим на Си (страница 4)
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-смартфоне.