Тёмный

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

Тимофей Хирьянов
Подписаться 352 тыс.
Просмотров 115 тыс.
50% 1

Этапы компиляции: предобработка, трансляция, компоновка.
Компилятор GCC.
Компиляция в консоли.
Курс молодого бойца по информатике (Язык Си).
cs.mipt.ru/c_intro

Опубликовано:

 

8 авг 2018

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 122   
@user-xp8zi5bs1d
@user-xp8zi5bs1d 3 года назад
Ни одного препода в ВУЗе не было, которые так объясняли бы! Обидно, что на такую большую страну приходится так мало профессионалов (именно в сфере преподавания). Спасибо, Тимофей!
@bogdantymKOLUBO
@bogdantymKOLUBO 8 месяцев назад
Кто умеет, делает; кто не умеет, учит других; а кто не умеет и этого, учит учителей.“ - Лоуренс Питер
@Andrew_Petrovich_Zykov
@Andrew_Petrovich_Zykov 6 месяцев назад
​@@bogdantymKOLUBOон учит и умеет
@tapok2681
@tapok2681 14 дней назад
​@@bogdantymKOLUBO А теперь по существу, к чему конкретно ты это написал?
@user-qo8ll7ff4e
@user-qo8ll7ff4e 5 лет назад
Спасибо большое за то, что размещаете видеоуроки.
@tkhirianov
@tkhirianov 5 лет назад
Иван, спасибо за отзыв. Благодарность можно перечислять в FSF.org, именно они воодушевляют меня на максимальное в моей жизни использование свободных лицензий для контента.
@user-in8cs4me8q
@user-in8cs4me8q Год назад
@@tkhirianov Спасибо Вам за работу!
@MrAlexPhilippov
@MrAlexPhilippov 3 года назад
Один этап пропущен - перевод программы с текста на Си в текст на языке ассемблера, а уже потом ассемблерный код транслируется в объектный в двоичном виде.
@lkarlon6995
@lkarlon6995 5 лет назад
Спасибо за уроки по языку Си! В интернете более-менее приемлимые уроки только по С++, а вот по Си люди такие видео делают, что можно уснуть. У вас все очень понятно, не скучно, лаконично. Мне 30 лет я и решил только сейчас начать программирование изучать.
@neocortexlab
@neocortexlab 5 лет назад
Мне почти 40, нормально! К 40-ка будешь на 5 ЯПах в уме задачи щёлкать, если не оставишь упражнения. Могу рекомендовать сразу для Ведроидов по-мелочи что-то собирать -- вход в тему несколько утомительный, но в этом будущее.
@mrbale1815
@mrbale1815 4 года назад
с слишком жёстко для начала
@someone-rj5fm
@someone-rj5fm 4 года назад
@@mrbale1815 да не нормально, даже легко. Та же физика, химия и прочие науки гораздо сложнее
@CatacombRaider
@CatacombRaider 7 месяцев назад
Как дела после 4х лет написания этого комментария?)
@user-vitya1
@user-vitya1 5 лет назад
Спасибо большое за ваши уроки!
@johnsmith-yk5vz
@johnsmith-yk5vz 5 лет назад
"когда компьютеры были большими" - огонь фразочка))))
@berry_v1bes
@berry_v1bes 10 месяцев назад
Не могу описать дозу дофамина которую я получаю от просмотра таких видео !!! Спасибо
@cat_amanita
@cat_amanita 4 года назад
Переменная PATH сбросится если закрыть консоль и заново открыть. Поэтому лучше уж сразу в переменные среды вписать через графический интерфейс. Точнее в переменных среды найти PATH и отредактировать
@kevart9645
@kevart9645 4 года назад
Тимофей Фёдорович, великолепная подача материала, выразительная интонация, максимально доходчиво - ОТ ДУШИ!
@protiv_bio
@protiv_bio 4 года назад
18:59 вполне человекочитаемо: "ыеяяяя хюяя" себе программка. П.с.: в МФТИ одни из лучших преподов, а мое чувство юмора оставляет желать лучшего.
@ebryzhak
@ebryzhak 4 года назад
Огромное спасибо, Тимофей Федорович! Открыли мои глаза!
@everlastingsummer2044
@everlastingsummer2044 3 года назад
эхх пришла в школу 21 в бассейн, а незнание таких элементарных вещей заступорило, в результате утонула во второй день и утопила мечты(. Спасибо большое за уроки!
@kopkazhik
@kopkazhik 5 лет назад
Спасибо за уроки! Ваши уроки, одни из самых лучших, мне есть с чем сравнить!
@juvusart
@juvusart 4 года назад
Без воды, всё чётко и по делу.
@7gennews
@7gennews Год назад
Пока что лучшее видео в ютубе на данную тему, очень наглядно, понятно и четко, остальные видео либо совсем для тех, кто самостоятельно компьютер включить не может, либо абы что и абы как. Спасибо.
@smthsmth111
@smthsmth111 5 лет назад
Спасибо. Объясняете сложные вещи простым и понятным языком.
@cat_amanita
@cat_amanita 4 года назад
Очень хорошо объясняете. Чувствуется опыт в преподавании
@delta3537
@delta3537 Год назад
Отличное видео! Всё чётко, понятно и наглядно. Спасибо!
@high_fly_bird
@high_fly_bird Год назад
Такое короткое видео, но настолько понятно и наглядно объяснили! Спасибо!
@user-ip2yx4hk3z
@user-ip2yx4hk3z 2 месяца назад
Благодарю за обучение,хорошо объясняете.
@CanalNew1
@CanalNew1 3 года назад
Абалденный курс. Мое почтение.
@user-dg4rg3rk7k
@user-dg4rg3rk7k 4 года назад
Отличный преподаватель, прекрасная подача, четко, профессионально и понятно! Спасибо, за Ваши уроки, Тимофей!
@m.d.2029
@m.d.2029 4 месяца назад
Супер объяснение!! Спасибо!
@mental_equilibrist
@mental_equilibrist 5 лет назад
Спасибо большое за Ваши уроки.
@ed_tomeyan
@ed_tomeyan 5 лет назад
Спасибо большое за уроки!
@user-io2oc6sh3g
@user-io2oc6sh3g 4 года назад
Тимофей, спасибо вам!
@murm3ow407
@murm3ow407 4 года назад
Самый лучший преподаватель!))
@gleb_bro8710
@gleb_bro8710 4 года назад
Спасибо, у меня компилятор в Code Blocks не работает, а это видео мне очень помогло. Теперь я могу компилировать через командную строку.
@thatslife2467
@thatslife2467 5 лет назад
Святой человек!
@warriorkg5006
@warriorkg5006 5 лет назад
какие же крутые уроки!!!
@user-er2my7ev9k
@user-er2my7ev9k 4 года назад
пожалуйста продолжайте учить и показывать на видео!
@user-km5xt2gt7l
@user-km5xt2gt7l 4 года назад
большое спасибо, много нового и интересного сегодня узнал))
@m.ya.yakovlev
@m.ya.yakovlev 7 месяцев назад
Познавательно. Я некоторых нюансов не знал, хотя сам преподаю программирование.
@user-ms6iz5ro4q
@user-ms6iz5ro4q Год назад
Спасибо за видео.
@vladimirserdyuk6795
@vladimirserdyuk6795 4 года назад
Молодец мужик!
@sisadminuz6728
@sisadminuz6728 Год назад
спасибо огромное за видео
@user-qm6pu1bl9n
@user-qm6pu1bl9n 2 года назад
Спасибо большое!!!
@neocortexlab
@neocortexlab 5 лет назад
Жаль не было таких видосов, когда я был безусым юнцом (си уже был)...... эх, тогда и Трубы не было, но си уже был...
@protiv_bio
@protiv_bio 4 года назад
А тогда си уже был?)
@user-xm5zl9up4r
@user-xm5zl9up4r Месяц назад
Спасибо
@Progrestimes
@Progrestimes 2 года назад
Спасибо за видео, скажите пожалуйста при компиляции берётся только те функции из библиотек что использовали в коде или вся библиотека копулируется в конечной exe файл.
@samandarquvatov7171
@samandarquvatov7171 Год назад
Спасибо большое 👍 Просто супер спасибо за видеоуроки
@user-nn5ws5nd3j
@user-nn5ws5nd3j 3 года назад
весёлый парниша молодец
@skva85
@skva85 3 года назад
Почему не показали получение файла .s с листингом на asm???
@greentree5707
@greentree5707 Год назад
Спасибо за ваши уроки! Мне почти 40,чувствую себя студентом)) посоветуйте пожалуйста he-редактор.
@derka211
@derka211 3 года назад
добрый день, Тимофей. мне не совсем понятно как выделять вручную файл препроцессинга. файл .с компилируется и работает, но когда я перенаправляю вручную x.c >prep_x.c компилятор мне сообщает о синтаксической ошибке. типа нету аргументов в функции main(), но я сейчас на том этапе обучения, когда еще оставляю там пусто, поскольку не понимаю что туда писать когда в самой функции уже есть все необходимые данные для работы такой примитивной программы как принтф. спасибо.
@kirillpupkov6314
@kirillpupkov6314 Год назад
Респект!
@zyx321123xyz
@zyx321123xyz 3 года назад
Вместо перенаправления(>) при вызове gcc можно просто опцию -o использовать, что CodeBlocks и делает.
@Morexod999
@Morexod999 2 года назад
Офигенно
@user-pw3ge3te3q
@user-pw3ge3te3q Год назад
Подскажите пожалуйста, почему в видео файле hello_preprocessed.o код не на языке ассемблера? Увидел puts, но то что в блакноте не похоже на язык ассемблера, какие то символы, или это зависит от того, где открывать объектный файл? Я новичок в программировании, никогда ранее не изучал вопрос, что происходит после того, как я запускаю программу на языке высокого уровня. Большое спасибо за видео! Заранее спасибо за помощь!
@bezimenybezim
@bezimenybezim Год назад
Для того, что бы получить код на языке ассемблера нужна опция -S
@user-ww8hb4xh4m
@user-ww8hb4xh4m 3 года назад
Почему у меня через терминал не получается "Hello World" открыть ? У меня и близко нет там ничего такого что тут рассматривается . В "Build log " у меня тоже ничего связанного с mingv32-gcc.exe нет. Почему у меня этого всего нет ?
@ehson346
@ehson346 3 года назад
16:36 Sublime Text!!
@ohnocoder
@ohnocoder 2 года назад
Not, it's cmd😀
@dimalink4486
@dimalink4486 Год назад
Вот такое я пропустил, при первичном изучении. Мне и без этого было очень тяжело это все понимать. Сам СИ. Я тогда пропустил все это, руками еще писать, и все эти процессы - там О файлы... Я тогда не стал это изучать. Сейчас зато вот посмотрел как это делается. Что это такое.
@TS-iq8oy
@TS-iq8oy Год назад
Что за версия винды?
@andreinivchik5247
@andreinivchik5247 3 года назад
Одному мне стало безумно интересно почему именно a.exe/a.out ?)
@andreinivchik5247
@andreinivchik5247 3 года назад
Если кому тоже интересно, то на англоязычной wiki сказано, что "a.out" расшифровывается, как "assembler output"
@janereed4219
@janereed4219 4 года назад
немного не понятно, почему на этапе компоновки нужно связаться со стандартной библиотекой? разве препроцессор не копирует ее в файл? зачем тогда еще раз к ней подключаться?
@user-rr7tl7hf7q
@user-rr7tl7hf7q 4 года назад
у меня такой же вопрос. пока не нашел ответа
@araratmatinyan774
@araratmatinyan774 4 года назад
Как я понимаю препроцессор копирует весь файл стандартной библиотеки, а на этапе компоновки в исполняемый файл добавляются только те функции из стандартной библиотеки, которые будут вызыватся в самой программе
@janereed4219
@janereed4219 4 года назад
@@user-rr7tl7hf7q Есть заголовочные файлы, а есть библиотеки и это не одно и то же (мне раньше это было не очевидно). Заголовочный файл - это просто ОБЪЯВЛЕНИЯ функций, просто список как бы, что вот такие функции есть в программе. Библиотека - это файл, который содержит ОПРЕДЕЛЕНИЕ этих функций, то есть код, где написано, что делает функция. Заголовочных файлов может быть много. Библиотек может быть много. Препроцессор копирует текст из заголовочных файлов в код программы, теперь программа знает, какие функции в ней будут использоваться, но еще не знает, как они устроены. Компоновщик соединяет файлы с кодом и библиотеки (библиотека тоже файл), теперь, программа знает как работают функции, которые были объявлены в заголовочном файле. нигде не могла найти доступное объяснение, пришлось основательно изучать этот вопрос, тогда-то и стало понятно. надеюсь, поможет))
@janereed4219
@janereed4219 4 года назад
@@araratmatinyan774 нет, это не так, посмотрите мой новый комментарий в этом обсуждении
@masson1529
@masson1529 2 года назад
@@janereed4219 у вас есть vk?
@user-oq6ss3xs2g
@user-oq6ss3xs2g 3 года назад
Забыли про перевод в ассемблер а так отлично. в объектном файле те слова .text .data puts это элементы ассемблера
@fish9370
@fish9370 2 года назад
Не совсем, puts это библиотечная функция, которую в конечном итоге вызывает printf
@michaeljordan1283
@michaeljordan1283 3 года назад
Почему получаются несколько объектных файлов?
@fish9370
@fish9370 2 года назад
Объектный файл появляется для каждого файла *.c
@danycall9457
@danycall9457 3 года назад
Подскажите пожалуйста. Ведь после препроцессинга файла, инклюд вставляет исходный код библиотеки в код нашей программы. Тогда куда пропадает код библиотеки при трансляции в объектный файл? И тогда зачем нужен линкер, если на этапе препроцессинга код библиотеки или другого файла при помощи инклюда вставляется в наш файл?
@user-yq6sx8bz6l
@user-yq6sx8bz6l 3 года назад
Код пропадает, скорее всего, потому что у компиляторов есть такая оптимизация как Dead Code Elimination, которая убирает из исходников/промежуточного представления код, который нигде не используется
@fish9370
@fish9370 2 года назад
Неверное утверждение, что при препроцессинге вставляется код. Вставляются прототипы, и константы. Т.е. это лишь позволяет компилятору корректно оформить вызовы функций. А код вставляется уже при компоновке, и при этом вместо мнемонических символов проставляются реальные адреса (это и есть связывание, поэтому его еще называют линковщик)
@protiv_bio
@protiv_bio 4 года назад
А представьте, что вы в блокноте открыли исходники hello world, поменяли букву и случайно написали программу, раскрывающую секреты мироздания. Надо было сохранить и в виртуалке запустить!
@errorgrisha
@errorgrisha 2 года назад
А как же файл на языке ассемблера? Или в Си такого этапа нет?
@bezimenybezim
@bezimenybezim Год назад
Для этого нужна опция -S
@user-rs1lw2gg8l
@user-rs1lw2gg8l 3 года назад
)
@neverreply2017
@neverreply2017 3 года назад
Если GCC для unix-подобных систем, то почему на доске нарисован exe-файл???
@artsiomauhustsinovich4143
@artsiomauhustsinovich4143 3 года назад
лайк. Но почему windows xp в 2018?) Есть ли какая-то конкретная причина?
@user-ws7bv9je2m
@user-ws7bv9je2m 3 года назад
Семерка это. Просто отключены визуальные эффекты.
@fish9370
@fish9370 2 года назад
Почему Windows, когда речь о компиляции? Вот как вопрос должен звучать
@artsiomauhustsinovich4143
@artsiomauhustsinovich4143 2 года назад
@@fish9370 почему не windows?
@saas9016
@saas9016 6 месяцев назад
Трушин в мире csi?
@mrbale1815
@mrbale1815 4 года назад
на какой винде он работает? и почему такая древность?
@filcondrat
@filcondrat 4 года назад
95
@MegaNekish
@MegaNekish 3 года назад
7ка
@bogdantymKOLUBO
@bogdantymKOLUBO 8 месяцев назад
7 Ка с первым сервиспаком
@user-kx8no8dr4f
@user-kx8no8dr4f 4 года назад
)))
@user-km9rt2uw3g
@user-km9rt2uw3g 3 года назад
А можно как-то обойтись без библиотек? Они же много весят и перегружены лишними функциями, которые нам могут вообще не пригодиться. Я думал в Си этого будет меньше и он сам по себе самодостаточен. В принципе я же могу сам написать нужные мне функции? Зачем тогда библиотеки, если я знаю что именно мне нужно?
@letsgameco3514
@letsgameco3514 3 года назад
Ты сам можешь написать библиотеку и включить её в файл.
@fish9370
@fish9370 2 года назад
Коллега, давайте без фанатизма. Вы не напишете вывод без стандартных либ, а если напишете быстро поймете, что это было вам не нужно. И с чего вы взяли, что лишние функции, которые есть в либе попадают к вам исполнимый файл?
@user-km9rt2uw3g
@user-km9rt2uw3g 2 года назад
@@fish9370 А при компиляции он же всю библиотеку зажуёт? (вместе со всем её содержимым хламом)?
@user-or1hy4xz8u
@user-or1hy4xz8u 2 года назад
@@user-km9rt2uw3g кстати, а где находится этот заголовочный файл ? В компиляторе?
@qkiee
@qkiee Год назад
@@user-or1hy4xz8u ./gcc/include
@AlicesPickX
@AlicesPickX 4 года назад
Мне одному кажется что заголовок видео похож на Blue Screen of Death.
@atom3848
@atom3848 3 года назад
макро-бесие а как же dom-дерево? а там висит запретный плод😩
@atom3848
@atom3848 3 года назад
а gcc с XML станится?
@petrik77b
@petrik77b 4 года назад
Чем больше пользуюсь Линуксом, тем больше понимаю : "хочешь научиться программировать - сначала поставь себе на комп какую-нибудь Ubuntu, чтобы потом не испытывать гемора..." Просто Линукс в принципе "заточен" под это.
@MegaNekish
@MegaNekish 3 года назад
И чем же он заточен?
@fish9370
@fish9370 2 года назад
@@MegaNekish Человеческим шеллом
@djohardudaev952
@djohardudaev952 7 месяцев назад
линковка - не русское слово. То ли дело компоновка, компиляция и трансляция
@alexreg78
@alexreg78 2 года назад
компиляция под 8 ядер))
@user-fu9ix6xh7x
@user-fu9ix6xh7x 9 месяцев назад
понятно что нт хрена не понятно
@bootstrapers
@bootstrapers 3 года назад
Изучать си под Windows - кощунство.
@fish9370
@fish9370 2 года назад
Как же я с вами согласен. Смотреть больно как мужчина мучается с путями
@aabdev
@aabdev Год назад
зачем нужны фaйлы *.d *.a?
@bezimenybezim
@bezimenybezim Год назад
.d это файл языка D, .a это статическая библиотека для unix подобных систем (.lib для windows)
@kirillmalchenko4453
@kirillmalchenko4453 Год назад
Спасибо
Далее
ATEEZ(에이티즈) - 'WORK' Official MV
03:15
Просмотров 14 млн
Sprinting with More and More Money
00:29
Просмотров 34 млн
Пробую торты
00:43
Просмотров 225 тыс.
Рекурсия. Репка и матрёшка
18:37
Просмотров 116 тыс.
Как работает C/C++?
26:51
Просмотров 218 тыс.
ATEEZ(에이티즈) - 'WORK' Official MV
03:15
Просмотров 14 млн