Этапы компиляции на Си: предобработка, трансляция, компоновка

Поділитися
Вставка
  • Опубліковано 22 лис 2024

КОМЕНТАРІ • 130

  • @RedPixel-j1e
    @RedPixel-j1e 4 роки тому +56

    Ни одного препода в ВУЗе не было, которые так объясняли бы! Обидно, что на такую большую страну приходится так мало профессионалов (именно в сфере преподавания). Спасибо, Тимофей!

    • @bogdantymKOLUBO
      @bogdantymKOLUBO Рік тому +2

      Кто умеет, делает; кто не умеет, учит других; а кто не умеет и этого, учит учителей.“ - Лоуренс Питер

    • @Andrew_Petrovich_Zykov
      @Andrew_Petrovich_Zykov Рік тому

      ​@@bogdantymKOLUBOон учит и умеет

    • @tapok2681
      @tapok2681 6 місяців тому +1

      ​@@bogdantymKOLUBO А теперь по существу, к чему конкретно ты это написал?

    • @nelavas4651
      @nelavas4651 4 місяці тому

      ​@@bogdantymKOLUBOне согласен, потому что, к примеру, ветераны войны очень даже могут учить новобранцев

    • @TherryYT
      @TherryYT 3 місяці тому

      ​@@bogdantymKOLUBOОн нашел себя в преподавании, а некоторе программисты даже основ не знают

  • @ИванБотяев-д2ы
    @ИванБотяев-д2ы 6 років тому +107

    Спасибо большое за то, что размещаете видеоуроки.

    • @tkhirianov
      @tkhirianov  6 років тому +45

      Иван, спасибо за отзыв. Благодарность можно перечислять в FSF.org, именно они воодушевляют меня на максимальное в моей жизни использование свободных лицензий для контента.

    • @АльбертСитдиков-х9ж
      @АльбертСитдиков-х9ж 2 роки тому +1

      @@tkhirianov Спасибо Вам за работу!

  • @lkarlon6995
    @lkarlon6995 6 років тому +19

    Спасибо за уроки по языку Си! В интернете более-менее приемлимые уроки только по С++, а вот по Си люди такие видео делают, что можно уснуть. У вас все очень понятно, не скучно, лаконично. Мне 30 лет я и решил только сейчас начать программирование изучать.

    • @neocortexlab
      @neocortexlab 6 років тому

      Мне почти 40, нормально! К 40-ка будешь на 5 ЯПах в уме задачи щёлкать, если не оставишь упражнения. Могу рекомендовать сразу для Ведроидов по-мелочи что-то собирать -- вход в тему несколько утомительный, но в этом будущее.

    • @mrbale1815
      @mrbale1815 4 роки тому

      с слишком жёстко для начала

    • @someone-rj5fm
      @someone-rj5fm 4 роки тому

      @@mrbale1815 да не нормально, даже легко. Та же физика, химия и прочие науки гораздо сложнее

    • @hunterist
      @hunterist Рік тому +4

      Как дела после 4х лет написания этого комментария?)

  • @berry_v1bes
    @berry_v1bes Рік тому +1

    Не могу описать дозу дофамина которую я получаю от просмотра таких видео !!!
    Спасибо

  • @user-vitya1
    @user-vitya1 6 років тому +68

    Спасибо большое за ваши уроки!

  • @johnsmith-yk5vz
    @johnsmith-yk5vz 5 років тому +27

    "когда компьютеры были большими" - огонь фразочка))))

  • @kevart9645
    @kevart9645 4 роки тому +1

    Тимофей Фёдорович, великолепная подача материала, выразительная интонация, максимально доходчиво - ОТ ДУШИ!

  • @7gennews
    @7gennews 2 роки тому

    Пока что лучшее видео в ютубе на данную тему, очень наглядно, понятно и четко, остальные видео либо совсем для тех, кто самостоятельно компьютер включить не может, либо абы что и абы как. Спасибо.

  • @juvusart
    @juvusart 5 років тому +5

    Без воды, всё чётко и по делу.

  • @kopkazhik
    @kopkazhik 5 років тому +8

    Спасибо за уроки! Ваши уроки, одни из самых лучших, мне есть с чем сравнить!

  • @MrAlexPhilippov
    @MrAlexPhilippov 4 роки тому +18

    Один этап пропущен - перевод программы с текста на Си в текст на языке ассемблера, а уже потом ассемблерный код транслируется в объектный в двоичном виде.

  • @smthsmth111
    @smthsmth111 6 років тому +6

    Спасибо. Объясняете сложные вещи простым и понятным языком.

  • @high_fly_bird
    @high_fly_bird 2 роки тому

    Такое короткое видео, но настолько понятно и наглядно объяснили! Спасибо!

  • @ebryzhak
    @ebryzhak 5 років тому +2

    Огромное спасибо, Тимофей Федорович! Открыли мои глаза!

  • @ДанилЧерепухин
    @ДанилЧерепухин 4 роки тому +2

    Отличный преподаватель, прекрасная подача, четко, профессионально и понятно! Спасибо, за Ваши уроки, Тимофей!

  • @gleb_bro8710
    @gleb_bro8710 4 роки тому +3

    Спасибо, у меня компилятор в Code Blocks не работает, а это видео мне очень помогло. Теперь я могу компилировать через командную строку.

  • @delta3537
    @delta3537 2 роки тому +1

    Отличное видео! Всё чётко, понятно и наглядно. Спасибо!

  • @TeuvoLaaksonen
    @TeuvoLaaksonen 3 місяці тому +46

    А какие методы вы используете для оптимизации процесса компиляции? я сам недавно искал курсы по IT, чтобы разобраться в таких вещах, и выбрал Skypro. Лично мне помогли наставники и практика с реальными задачами))

  • @everlastingsummer2044
    @everlastingsummer2044 4 роки тому +2

    эхх пришла в школу 21 в бассейн, а незнание таких элементарных вещей заступорило, в результате утонула во второй день и утопила мечты(. Спасибо большое за уроки!

  • @m.ya.yakovlev
    @m.ya.yakovlev Рік тому

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

  • @CanalNew1
    @CanalNew1 3 роки тому

    Абалденный курс. Мое почтение.

  • @cat_amanita
    @cat_amanita 4 роки тому +5

    Переменная PATH сбросится если закрыть консоль и заново открыть. Поэтому лучше уж сразу в переменные среды вписать через графический интерфейс. Точнее в переменных среды найти PATH и отредактировать

  • @cat_amanita
    @cat_amanita 4 роки тому

    Очень хорошо объясняете. Чувствуется опыт в преподавании

  • @thatslife2467
    @thatslife2467 5 років тому +17

    Святой человек!

  • @m.d.2029
    @m.d.2029 9 місяців тому

    Супер объяснение!! Спасибо!

  • @protiv_bio
    @protiv_bio 5 років тому +19

    18:59 вполне человекочитаемо: "ыеяяяя хюяя" себе программка. П.с.: в МФТИ одни из лучших преподов, а мое чувство юмора оставляет желать лучшего.

  • @Валентиннабоков-г3п

    пожалуйста продолжайте учить и показывать на видео!

  • @murm3ow407
    @murm3ow407 4 роки тому

    Самый лучший преподаватель!))

  • @neocortexlab
    @neocortexlab 6 років тому +9

    Жаль не было таких видосов, когда я был безусым юнцом (си уже был)...... эх, тогда и Трубы не было, но си уже был...

    • @protiv_bio
      @protiv_bio 5 років тому +3

      А тогда си уже был?)

  • @mental_equilibrist
    @mental_equilibrist 6 років тому +2

    Спасибо большое за Ваши уроки.

  • @СергейНикитин-ж6х
    @СергейНикитин-ж6х 5 років тому +1

    Тимофей, спасибо вам!

  • @ed_tomeyan
    @ed_tomeyan 6 років тому +8

    Спасибо большое за уроки!

  • @vladimirserdyuk6795
    @vladimirserdyuk6795 4 роки тому +1

    Молодец мужик!

  • @ДобрыйВечер-э3и

    Спасибо за видео.

  • @sisadminuz6728
    @sisadminuz6728 Рік тому

    спасибо огромное за видео

  • @samandarquvatov7171
    @samandarquvatov7171 2 роки тому

    Спасибо большое 👍
    Просто супер спасибо за видеоуроки

  • @warriorkg5006
    @warriorkg5006 5 років тому +1

    какие же крутые уроки!!!

  • @РусланХайрутдинов-м6п

    весёлый парниша молодец

  • @kirillmalchenko4453
    @kirillmalchenko4453 2 роки тому

    Спасибо

  • @zyx321123xyz
    @zyx321123xyz 3 роки тому

    Вместо перенаправления(>) при вызове gcc можно просто опцию -o использовать, что CodeBlocks и делает.

  • @user-qm6pu1bl9n
    @user-qm6pu1bl9n 3 роки тому

    Спасибо большое!!!

  • @ВасилийШалашов-п2й

    большое спасибо, много нового и интересного сегодня узнал))

  • @kirillpupkov6314
    @kirillpupkov6314 2 роки тому

    Респект!

  • @dimalink4486
    @dimalink4486 Рік тому

    Вот такое я пропустил, при первичном изучении. Мне и без этого было очень тяжело это все понимать. Сам СИ. Я тогда пропустил все это, руками еще писать, и все эти процессы - там О файлы... Я тогда не стал это изучать. Сейчас зато вот посмотрел как это делается. Что это такое.

  • @skva85
    @skva85 4 роки тому +2

    Почему не показали получение файла .s с листингом на asm???

  • @Fineew
    @Fineew 4 місяці тому

    я фанатка Тимофея Хирьянова 😎

  • @greentree5707
    @greentree5707 2 роки тому +1

    Спасибо за ваши уроки! Мне почти 40,чувствую себя студентом)) посоветуйте пожалуйста he-редактор.

  • @ehson346
    @ehson346 4 роки тому

    16:36 Sublime Text!!

  • @Morexod999
    @Morexod999 2 роки тому

    Офигенно

  • @protiv_bio
    @protiv_bio 5 років тому

    А представьте, что вы в блокноте открыли исходники hello world, поменяли букву и случайно написали программу, раскрывающую секреты мироздания. Надо было сохранить и в виртуалке запустить!

  • @ВалерийАпряткин-л9ф

    Забыли про перевод в ассемблер а так отлично. в объектном файле те слова .text .data puts это элементы ассемблера

    • @fish9370
      @fish9370 3 роки тому

      Не совсем, puts это библиотечная функция, которую в конечном итоге вызывает printf

  • @Progrestimes
    @Progrestimes 3 роки тому

    Спасибо за видео, скажите пожалуйста при компиляции берётся только те функции из библиотек что использовали в коде или вся библиотека копулируется в конечной exe файл.

  • @andreinivchik5247
    @andreinivchik5247 4 роки тому +4

    Одному мне стало безумно интересно почему именно a.exe/a.out ?)

    • @andreinivchik5247
      @andreinivchik5247 4 роки тому +13

      Если кому тоже интересно, то на англоязычной wiki сказано, что "a.out" расшифровывается, как "assembler output"

  • @aleksproger_il
    @aleksproger_il 2 роки тому +1

    Подскажите пожалуйста, почему в видео файле hello_preprocessed.o код не на языке ассемблера? Увидел puts, но то что в блакноте не похоже на язык ассемблера, какие то символы, или это зависит от того, где открывать объектный файл?
    Я новичок в программировании, никогда ранее не изучал вопрос, что происходит после того, как я запускаю программу на языке высокого уровня.
    Большое спасибо за видео!
    Заранее спасибо за помощь!

    • @bezimenybezim
      @bezimenybezim 2 роки тому +1

      Для того, что бы получить код на языке ассемблера нужна опция -S

  • @derka211
    @derka211 4 роки тому

    добрый день, Тимофей. мне не совсем понятно как выделять вручную файл препроцессинга. файл .с компилируется и работает, но когда я перенаправляю вручную x.c >prep_x.c компилятор мне сообщает о синтаксической ошибке. типа нету аргументов в функции main(), но я сейчас на том этапе обучения, когда еще оставляю там пусто, поскольку не понимаю что туда писать когда в самой функции уже есть все необходимые данные для работы такой примитивной программы как принтф. спасибо.

  • @artemposadskiy6959
    @artemposadskiy6959 5 місяців тому

    Это актуально в 2024? Смотрю, интересно

    • @nelavas4651
      @nelavas4651 4 місяці тому

      вполне актуально

  • @janereed4219
    @janereed4219 4 роки тому +2

    немного не понятно, почему на этапе компоновки нужно связаться со стандартной библиотекой? разве препроцессор не копирует ее в файл? зачем тогда еще раз к ней подключаться?

    • @ВладВертикалов
      @ВладВертикалов 4 роки тому

      у меня такой же вопрос. пока не нашел ответа

    • @araratmatinyan774
      @araratmatinyan774 4 роки тому

      Как я понимаю препроцессор копирует весь файл стандартной библиотеки, а на этапе компоновки в исполняемый файл добавляются только те функции из стандартной библиотеки, которые будут вызыватся в самой программе

    • @janereed4219
      @janereed4219 4 роки тому +12

      @@ВладВертикалов Есть заголовочные файлы, а есть библиотеки и это не одно и то же (мне раньше это было не очевидно). Заголовочный файл - это просто ОБЪЯВЛЕНИЯ функций, просто список как бы, что вот такие функции есть в программе. Библиотека - это файл, который содержит ОПРЕДЕЛЕНИЕ этих функций, то есть код, где написано, что делает функция. Заголовочных файлов может быть много. Библиотек может быть много. Препроцессор копирует текст из заголовочных файлов в код программы, теперь программа знает, какие функции в ней будут использоваться, но еще не знает, как они устроены. Компоновщик соединяет файлы с кодом и библиотеки (библиотека тоже файл), теперь, программа знает как работают функции, которые были объявлены в заголовочном файле. нигде не могла найти доступное объяснение, пришлось основательно изучать этот вопрос, тогда-то и стало понятно. надеюсь, поможет))

    • @janereed4219
      @janereed4219 4 роки тому

      @@araratmatinyan774 нет, это не так, посмотрите мой новый комментарий в этом обсуждении

    • @masson1529
      @masson1529 3 роки тому

      @@janereed4219 у вас есть vk?

  • @TS-iq8oy
    @TS-iq8oy 2 роки тому

    Что за версия винды?

  • @БогданЧеркасов-ю2ь

    Почему у меня через терминал не получается "Hello World" открыть ? У меня и близко нет там ничего такого что тут рассматривается .
    В "Build log " у меня тоже ничего связанного с mingv32-gcc.exe нет. Почему у меня этого всего нет ?

  • @michaeljordan1283
    @michaeljordan1283 3 роки тому

    Почему получаются несколько объектных файлов?

    • @fish9370
      @fish9370 3 роки тому

      Объектный файл появляется для каждого файла *.c

  • @saas9016
    @saas9016 11 місяців тому

    Трушин в мире csi?

  • @errorgrisha
    @errorgrisha 3 роки тому

    А как же файл на языке ассемблера? Или в Си такого этапа нет?

    • @bezimenybezim
      @bezimenybezim 2 роки тому +1

      Для этого нужна опция -S

  • @AlicesPickX
    @AlicesPickX 4 роки тому

    Мне одному кажется что заголовок видео похож на Blue Screen of Death.

  • @ЦарицаПробкаЯнкаСупер

    макро-бесие а как же dom-дерево? а там висит запретный плод😩

  • @РичиОЗ-ч2ю
    @РичиОЗ-ч2ю 4 роки тому

    А можно как-то обойтись без библиотек? Они же много весят и перегружены лишними функциями, которые нам могут вообще не пригодиться. Я думал в Си этого будет меньше и он сам по себе самодостаточен. В принципе я же могу сам написать нужные мне функции? Зачем тогда библиотеки, если я знаю что именно мне нужно?

    • @letsgameco3514
      @letsgameco3514 4 роки тому +1

      Ты сам можешь написать библиотеку и включить её в файл.

    • @fish9370
      @fish9370 3 роки тому

      Коллега, давайте без фанатизма. Вы не напишете вывод без стандартных либ, а если напишете быстро поймете, что это было вам не нужно. И с чего вы взяли, что лишние функции, которые есть в либе попадают к вам исполнимый файл?

    • @РичиОЗ-ч2ю
      @РичиОЗ-ч2ю 3 роки тому

      @@fish9370 А при компиляции он же всю библиотеку зажуёт? (вместе со всем её содержимым хламом)?

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 2 роки тому

      @@РичиОЗ-ч2ю кстати, а где находится этот заголовочный файл ? В компиляторе?

    • @maidkid
      @maidkid 2 роки тому

      @@ДмитрийНормов-ю6ц ./gcc/include

  • @МАГИЯРЕТРО
    @МАГИЯРЕТРО 4 роки тому

    )))

  • @artsiomauhustsinovich4143
    @artsiomauhustsinovich4143 3 роки тому

    лайк. Но почему windows xp в 2018?) Есть ли какая-то конкретная причина?

    • @Александр-Маркин
      @Александр-Маркин 3 роки тому +2

      Семерка это. Просто отключены визуальные эффекты.

    • @fish9370
      @fish9370 3 роки тому

      Почему Windows, когда речь о компиляции? Вот как вопрос должен звучать

    • @artsiomauhustsinovich4143
      @artsiomauhustsinovich4143 3 роки тому

      @@fish9370 почему не windows?

  • @petrik77b
    @petrik77b 5 років тому +4

    Чем больше пользуюсь Линуксом, тем больше понимаю : "хочешь научиться программировать - сначала поставь себе на комп какую-нибудь Ubuntu, чтобы потом не испытывать гемора..."
    Просто Линукс в принципе "заточен" под это.

    • @MegaNekish
      @MegaNekish 4 роки тому +3

      И чем же он заточен?

    • @fish9370
      @fish9370 3 роки тому

      @@MegaNekish Человеческим шеллом

  • @mrbale1815
    @mrbale1815 4 роки тому

    на какой винде он работает? и почему такая древность?

  • @djohardudaev95
    @djohardudaev95 Рік тому +1

    линковка - не русское слово. То ли дело компоновка, компиляция и трансляция

  • @danycall9457
    @danycall9457 4 роки тому +1

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

    • @МосейкоКирилл
      @МосейкоКирилл 4 роки тому +2

      Код пропадает, скорее всего, потому что у компиляторов есть такая оптимизация как Dead Code Elimination, которая убирает из исходников/промежуточного представления код, который нигде не используется

    • @fish9370
      @fish9370 3 роки тому +1

      Неверное утверждение, что при препроцессинге вставляется код. Вставляются прототипы, и константы. Т.е. это лишь позволяет компилятору корректно оформить вызовы функций. А код вставляется уже при компоновке, и при этом вместо мнемонических символов проставляются реальные адреса (это и есть связывание, поэтому его еще называют линковщик)

  • @neverreply2017
    @neverreply2017 4 роки тому

    Если GCC для unix-подобных систем, то почему на доске нарисован exe-файл???

  • @alexreg78
    @alexreg78 3 роки тому

    компиляция под 8 ядер))

  • @ЦарьЕвгений-у9с

    понятно что нт хрена не понятно

  • @bootstrapers
    @bootstrapers 4 роки тому +2

    Изучать си под Windows - кощунство.

    • @fish9370
      @fish9370 3 роки тому

      Как же я с вами согласен. Смотреть больно как мужчина мучается с путями

  • @dragonitenergy
    @dragonitenergy Місяць тому

    Господи, что за ахиния про машинный код, для зумеров и жертв ЕГЭ. Машинный код прекрасно читается и меняется без перекомпиляции. Только открывать его надо не текстовым, а hex-редактором и дизассемблером. И очень полезно знать как кодируются и работают машинные команды, для понимания архитектуры компьютера и оптимизации ПО. А вы вводите детей в заблуждение.

  • @aabdev
    @aabdev 2 роки тому

    зачем нужны фaйлы *.d *.a?

    • @bezimenybezim
      @bezimenybezim 2 роки тому

      .d это файл языка D, .a это статическая библиотека для unix подобных систем (.lib для windows)

  • @ЗаурФазулджанов
    @ЗаурФазулджанов 8 місяців тому

    Благодарю за обучение,хорошо объясняете.

  • @РусланКарнеенко
    @РусланКарнеенко 7 місяців тому

    Спасибо