Ни одного препода в ВУЗе не было, которые так объясняли бы! Обидно, что на такую большую страну приходится так мало профессионалов (именно в сфере преподавания). Спасибо, Тимофей!
Иван, спасибо за отзыв. Благодарность можно перечислять в FSF.org, именно они воодушевляют меня на максимальное в моей жизни использование свободных лицензий для контента.
Спасибо за уроки по языку Си! В интернете более-менее приемлимые уроки только по С++, а вот по Си люди такие видео делают, что можно уснуть. У вас все очень понятно, не скучно, лаконично. Мне 30 лет я и решил только сейчас начать программирование изучать.
Мне почти 40, нормально! К 40-ка будешь на 5 ЯПах в уме задачи щёлкать, если не оставишь упражнения. Могу рекомендовать сразу для Ведроидов по-мелочи что-то собирать -- вход в тему несколько утомительный, но в этом будущее.
Пока что лучшее видео в ютубе на данную тему, очень наглядно, понятно и четко, остальные видео либо совсем для тех, кто самостоятельно компьютер включить не может, либо абы что и абы как. Спасибо.
эхх пришла в школу 21 в бассейн, а незнание таких элементарных вещей заступорило, в результате утонула во второй день и утопила мечты(. Спасибо большое за уроки!
Один этап пропущен - перевод программы с текста на Си в текст на языке ассемблера, а уже потом ассемблерный код транслируется в объектный в двоичном виде.
А какие методы вы используете для оптимизации процесса компиляции? я сам недавно искал курсы по IT, чтобы разобраться в таких вещах, и выбрал Skypro. Лично мне помогли наставники и практика с реальными задачами))
Переменная PATH сбросится если закрыть консоль и заново открыть. Поэтому лучше уж сразу в переменные среды вписать через графический интерфейс. Точнее в переменных среды найти PATH и отредактировать
Подскажите пожалуйста, почему в видео файле hello_preprocessed.o код не на языке ассемблера? Увидел puts, но то что в блакноте не похоже на язык ассемблера, какие то символы, или это зависит от того, где открывать объектный файл? Я новичок в программировании, никогда ранее не изучал вопрос, что происходит после того, как я запускаю программу на языке высокого уровня. Большое спасибо за видео! Заранее спасибо за помощь!
Спасибо за видео, скажите пожалуйста при компиляции берётся только те функции из библиотек что использовали в коде или вся библиотека копулируется в конечной exe файл.
Вот такое я пропустил, при первичном изучении. Мне и без этого было очень тяжело это все понимать. Сам СИ. Я тогда пропустил все это, руками еще писать, и все эти процессы - там О файлы... Я тогда не стал это изучать. Сейчас зато вот посмотрел как это делается. Что это такое.
А представьте, что вы в блокноте открыли исходники hello world, поменяли букву и случайно написали программу, раскрывающую секреты мироздания. Надо было сохранить и в виртуалке запустить!
немного не понятно, почему на этапе компоновки нужно связаться со стандартной библиотекой? разве препроцессор не копирует ее в файл? зачем тогда еще раз к ней подключаться?
Как я понимаю препроцессор копирует весь файл стандартной библиотеки, а на этапе компоновки в исполняемый файл добавляются только те функции из стандартной библиотеки, которые будут вызыватся в самой программе
@@ВладВертикалов Есть заголовочные файлы, а есть библиотеки и это не одно и то же (мне раньше это было не очевидно). Заголовочный файл - это просто ОБЪЯВЛЕНИЯ функций, просто список как бы, что вот такие функции есть в программе. Библиотека - это файл, который содержит ОПРЕДЕЛЕНИЕ этих функций, то есть код, где написано, что делает функция. Заголовочных файлов может быть много. Библиотек может быть много. Препроцессор копирует текст из заголовочных файлов в код программы, теперь программа знает, какие функции в ней будут использоваться, но еще не знает, как они устроены. Компоновщик соединяет файлы с кодом и библиотеки (библиотека тоже файл), теперь, программа знает как работают функции, которые были объявлены в заголовочном файле. нигде не могла найти доступное объяснение, пришлось основательно изучать этот вопрос, тогда-то и стало понятно. надеюсь, поможет))
добрый день, Тимофей. мне не совсем понятно как выделять вручную файл препроцессинга. файл .с компилируется и работает, но когда я перенаправляю вручную x.c >prep_x.c компилятор мне сообщает о синтаксической ошибке. типа нету аргументов в функции main(), но я сейчас на том этапе обучения, когда еще оставляю там пусто, поскольку не понимаю что туда писать когда в самой функции уже есть все необходимые данные для работы такой примитивной программы как принтф. спасибо.
Почему у меня через терминал не получается "Hello World" открыть ? У меня и близко нет там ничего такого что тут рассматривается . В "Build log " у меня тоже ничего связанного с mingv32-gcc.exe нет. Почему у меня этого всего нет ?
Подскажите пожалуйста. Ведь после препроцессинга файла, инклюд вставляет исходный код библиотеки в код нашей программы. Тогда куда пропадает код библиотеки при трансляции в объектный файл? И тогда зачем нужен линкер, если на этапе препроцессинга код библиотеки или другого файла при помощи инклюда вставляется в наш файл?
Код пропадает, скорее всего, потому что у компиляторов есть такая оптимизация как Dead Code Elimination, которая убирает из исходников/промежуточного представления код, который нигде не используется
Неверное утверждение, что при препроцессинге вставляется код. Вставляются прототипы, и константы. Т.е. это лишь позволяет компилятору корректно оформить вызовы функций. А код вставляется уже при компоновке, и при этом вместо мнемонических символов проставляются реальные адреса (это и есть связывание, поэтому его еще называют линковщик)
А можно как-то обойтись без библиотек? Они же много весят и перегружены лишними функциями, которые нам могут вообще не пригодиться. Я думал в Си этого будет меньше и он сам по себе самодостаточен. В принципе я же могу сам написать нужные мне функции? Зачем тогда библиотеки, если я знаю что именно мне нужно?
Коллега, давайте без фанатизма. Вы не напишете вывод без стандартных либ, а если напишете быстро поймете, что это было вам не нужно. И с чего вы взяли, что лишние функции, которые есть в либе попадают к вам исполнимый файл?
Чем больше пользуюсь Линуксом, тем больше понимаю : "хочешь научиться программировать - сначала поставь себе на комп какую-нибудь Ubuntu, чтобы потом не испытывать гемора..." Просто Линукс в принципе "заточен" под это.
Господи, что за ахиния про машинный код, для зумеров и жертв ЕГЭ. Машинный код прекрасно читается и меняется без перекомпиляции. Только открывать его надо не текстовым, а hex-редактором и дизассемблером. И очень полезно знать как кодируются и работают машинные команды, для понимания архитектуры компьютера и оптимизации ПО. А вы вводите детей в заблуждение.
лучшее, что я видел по программированию и в частности по Си на просторах Интернета, спасибо Тимофей, большой труд!
Ни одного препода в ВУЗе не было, которые так объясняли бы! Обидно, что на такую большую страну приходится так мало профессионалов (именно в сфере преподавания). Спасибо, Тимофей!
Кто умеет, делает; кто не умеет, учит других; а кто не умеет и этого, учит учителей.“ - Лоуренс Питер
@@bogdantymKOLUBOон учит и умеет
@@bogdantymKOLUBO А теперь по существу, к чему конкретно ты это написал?
@@bogdantymKOLUBOне согласен, потому что, к примеру, ветераны войны очень даже могут учить новобранцев
@@bogdantymKOLUBOОн нашел себя в преподавании, а некоторе программисты даже основ не знают
Спасибо большое за то, что размещаете видеоуроки.
Иван, спасибо за отзыв. Благодарность можно перечислять в FSF.org, именно они воодушевляют меня на максимальное в моей жизни использование свободных лицензий для контента.
@@tkhirianov Спасибо Вам за работу!
Не могу описать дозу дофамина которую я получаю от просмотра таких видео !!!
Спасибо
Спасибо за уроки по языку Си! В интернете более-менее приемлимые уроки только по С++, а вот по Си люди такие видео делают, что можно уснуть. У вас все очень понятно, не скучно, лаконично. Мне 30 лет я и решил только сейчас начать программирование изучать.
Мне почти 40, нормально! К 40-ка будешь на 5 ЯПах в уме задачи щёлкать, если не оставишь упражнения. Могу рекомендовать сразу для Ведроидов по-мелочи что-то собирать -- вход в тему несколько утомительный, но в этом будущее.
с слишком жёстко для начала
@@mrbale1815 да не нормально, даже легко. Та же физика, химия и прочие науки гораздо сложнее
Как дела после 4х лет написания этого комментария?)
Спасибо большое за ваши уроки!
Тимофей Фёдорович, великолепная подача материала, выразительная интонация, максимально доходчиво - ОТ ДУШИ!
"когда компьютеры были большими" - огонь фразочка))))
Пока что лучшее видео в ютубе на данную тему, очень наглядно, понятно и четко, остальные видео либо совсем для тех, кто самостоятельно компьютер включить не может, либо абы что и абы как. Спасибо.
Спасибо за уроки! Ваши уроки, одни из самых лучших, мне есть с чем сравнить!
Без воды, всё чётко и по делу.
Спасибо. Объясняете сложные вещи простым и понятным языком.
Отличный преподаватель, прекрасная подача, четко, профессионально и понятно! Спасибо, за Ваши уроки, Тимофей!
Такое короткое видео, но настолько понятно и наглядно объяснили! Спасибо!
Огромное спасибо, Тимофей Федорович! Открыли мои глаза!
Спасибо, у меня компилятор в Code Blocks не работает, а это видео мне очень помогло. Теперь я могу компилировать через командную строку.
Отличное видео! Всё чётко, понятно и наглядно. Спасибо!
эхх пришла в школу 21 в бассейн, а незнание таких элементарных вещей заступорило, в результате утонула во второй день и утопила мечты(. Спасибо большое за уроки!
Один этап пропущен - перевод программы с текста на Си в текст на языке ассемблера, а уже потом ассемблерный код транслируется в объектный в двоичном виде.
Супер объяснение!! Спасибо!
18:59 вполне человекочитаемо: "ыеяяяя хюяя" себе программка. П.с.: в МФТИ одни из лучших преподов, а мое чувство юмора оставляет желать лучшего.
Абалденный курс. Мое почтение.
Очень хорошо объясняете. Чувствуется опыт в преподавании
Познавательно. Я некоторых нюансов не знал, хотя сам преподаю программирование.
Святой человек!
А какие методы вы используете для оптимизации процесса компиляции? я сам недавно искал курсы по IT, чтобы разобраться в таких вещах, и выбрал Skypro. Лично мне помогли наставники и практика с реальными задачами))
Самый лучший преподаватель!))
Переменная PATH сбросится если закрыть консоль и заново открыть. Поэтому лучше уж сразу в переменные среды вписать через графический интерфейс. Точнее в переменных среды найти PATH и отредактировать
Тимофей, спасибо вам!
Молодец мужик!
Спасибо за видео.
Спасибо большое за Ваши уроки.
спасибо огромное за видео
пожалуйста продолжайте учить и показывать на видео!
Спасибо большое за уроки!
какие же крутые уроки!!!
Спасибо большое 👍
Просто супер спасибо за видеоуроки
большое спасибо, много нового и интересного сегодня узнал))
Спасибо большое!!!
весёлый парниша молодец
Респект!
Спасибо
Жаль не было таких видосов, когда я был безусым юнцом (си уже был)...... эх, тогда и Трубы не было, но си уже был...
А тогда си уже был?)
Вместо перенаправления(>) при вызове gcc можно просто опцию -o использовать, что CodeBlocks и делает.
16:36 Sublime Text!!
Not, it's cmd😀
Офигенно
Почему не показали получение файла .s с листингом на asm???
Подскажите пожалуйста, почему в видео файле hello_preprocessed.o код не на языке ассемблера? Увидел puts, но то что в блакноте не похоже на язык ассемблера, какие то символы, или это зависит от того, где открывать объектный файл?
Я новичок в программировании, никогда ранее не изучал вопрос, что происходит после того, как я запускаю программу на языке высокого уровня.
Большое спасибо за видео!
Заранее спасибо за помощь!
Для того, что бы получить код на языке ассемблера нужна опция -S
Спасибо за ваши уроки! Мне почти 40,чувствую себя студентом)) посоветуйте пожалуйста he-редактор.
я фанатка Тимофея Хирьянова 😎
Спасибо за видео, скажите пожалуйста при компиляции берётся только те функции из библиотек что использовали в коде или вся библиотека копулируется в конечной exe файл.
Вот такое я пропустил, при первичном изучении. Мне и без этого было очень тяжело это все понимать. Сам СИ. Я тогда пропустил все это, руками еще писать, и все эти процессы - там О файлы... Я тогда не стал это изучать. Сейчас зато вот посмотрел как это делается. Что это такое.
А представьте, что вы в блокноте открыли исходники hello world, поменяли букву и случайно написали программу, раскрывающую секреты мироздания. Надо было сохранить и в виртуалке запустить!
немного не понятно, почему на этапе компоновки нужно связаться со стандартной библиотекой? разве препроцессор не копирует ее в файл? зачем тогда еще раз к ней подключаться?
у меня такой же вопрос. пока не нашел ответа
Как я понимаю препроцессор копирует весь файл стандартной библиотеки, а на этапе компоновки в исполняемый файл добавляются только те функции из стандартной библиотеки, которые будут вызыватся в самой программе
@@ВладВертикалов Есть заголовочные файлы, а есть библиотеки и это не одно и то же (мне раньше это было не очевидно). Заголовочный файл - это просто ОБЪЯВЛЕНИЯ функций, просто список как бы, что вот такие функции есть в программе. Библиотека - это файл, который содержит ОПРЕДЕЛЕНИЕ этих функций, то есть код, где написано, что делает функция. Заголовочных файлов может быть много. Библиотек может быть много. Препроцессор копирует текст из заголовочных файлов в код программы, теперь программа знает, какие функции в ней будут использоваться, но еще не знает, как они устроены. Компоновщик соединяет файлы с кодом и библиотеки (библиотека тоже файл), теперь, программа знает как работают функции, которые были объявлены в заголовочном файле. нигде не могла найти доступное объяснение, пришлось основательно изучать этот вопрос, тогда-то и стало понятно. надеюсь, поможет))
@@araratmatinyan774 нет, это не так, посмотрите мой новый комментарий в этом обсуждении
@@janereed4219 у вас есть vk?
добрый день, Тимофей. мне не совсем понятно как выделять вручную файл препроцессинга. файл .с компилируется и работает, но когда я перенаправляю вручную x.c >prep_x.c компилятор мне сообщает о синтаксической ошибке. типа нету аргументов в функции main(), но я сейчас на том этапе обучения, когда еще оставляю там пусто, поскольку не понимаю что туда писать когда в самой функции уже есть все необходимые данные для работы такой примитивной программы как принтф. спасибо.
Забыли про перевод в ассемблер а так отлично. в объектном файле те слова .text .data puts это элементы ассемблера
Не совсем, puts это библиотечная функция, которую в конечном итоге вызывает printf
Почему у меня через терминал не получается "Hello World" открыть ? У меня и близко нет там ничего такого что тут рассматривается .
В "Build log " у меня тоже ничего связанного с mingv32-gcc.exe нет. Почему у меня этого всего нет ?
Это актуально в 2024? Смотрю, интересно
вполне актуально
Одному мне стало безумно интересно почему именно a.exe/a.out ?)
Если кому тоже интересно, то на англоязычной wiki сказано, что "a.out" расшифровывается, как "assembler output"
Что за версия винды?
Почему получаются несколько объектных файлов?
Объектный файл появляется для каждого файла *.c
Подскажите пожалуйста. Ведь после препроцессинга файла, инклюд вставляет исходный код библиотеки в код нашей программы. Тогда куда пропадает код библиотеки при трансляции в объектный файл? И тогда зачем нужен линкер, если на этапе препроцессинга код библиотеки или другого файла при помощи инклюда вставляется в наш файл?
Код пропадает, скорее всего, потому что у компиляторов есть такая оптимизация как Dead Code Elimination, которая убирает из исходников/промежуточного представления код, который нигде не используется
Неверное утверждение, что при препроцессинге вставляется код. Вставляются прототипы, и константы. Т.е. это лишь позволяет компилятору корректно оформить вызовы функций. А код вставляется уже при компоновке, и при этом вместо мнемонических символов проставляются реальные адреса (это и есть связывание, поэтому его еще называют линковщик)
А как же файл на языке ассемблера? Или в Си такого этапа нет?
Для этого нужна опция -S
Трушин в мире csi?
А можно как-то обойтись без библиотек? Они же много весят и перегружены лишними функциями, которые нам могут вообще не пригодиться. Я думал в Си этого будет меньше и он сам по себе самодостаточен. В принципе я же могу сам написать нужные мне функции? Зачем тогда библиотеки, если я знаю что именно мне нужно?
Ты сам можешь написать библиотеку и включить её в файл.
Коллега, давайте без фанатизма. Вы не напишете вывод без стандартных либ, а если напишете быстро поймете, что это было вам не нужно. И с чего вы взяли, что лишние функции, которые есть в либе попадают к вам исполнимый файл?
@@fish9370 А при компиляции он же всю библиотеку зажуёт? (вместе со всем её содержимым хламом)?
@@РичиОЗ-ч2ю кстати, а где находится этот заголовочный файл ? В компиляторе?
@@ДмитрийНормов-ю6ц ./gcc/include
линковка - не русское слово. То ли дело компоновка, компиляция и трансляция
лайк. Но почему windows xp в 2018?) Есть ли какая-то конкретная причина?
Семерка это. Просто отключены визуальные эффекты.
Почему Windows, когда речь о компиляции? Вот как вопрос должен звучать
@@fish9370 почему не windows?
Если GCC для unix-подобных систем, то почему на доске нарисован exe-файл???
)
Мне одному кажется что заголовок видео похож на Blue Screen of Death.
макро-бесие а как же dom-дерево? а там висит запретный плод😩
а gcc с XML станится?
на какой винде он работает? и почему такая древность?
95
7ка
7 Ка с первым сервиспаком
Чем больше пользуюсь Линуксом, тем больше понимаю : "хочешь научиться программировать - сначала поставь себе на комп какую-нибудь Ubuntu, чтобы потом не испытывать гемора..."
Просто Линукс в принципе "заточен" под это.
И чем же он заточен?
@@MegaNekish Человеческим шеллом
)))
компиляция под 8 ядер))
Господи, что за ахиния про машинный код, для зумеров и жертв ЕГЭ. Машинный код прекрасно читается и меняется без перекомпиляции. Только открывать его надо не текстовым, а hex-редактором и дизассемблером. И очень полезно знать как кодируются и работают машинные команды, для понимания архитектуры компьютера и оптимизации ПО. А вы вводите детей в заблуждение.
понятно что нт хрена не понятно
Изучать си под Windows - кощунство.
Как же я с вами согласен. Смотреть больно как мужчина мучается с путями
зачем нужны фaйлы *.d *.a?
.d это файл языка D, .a это статическая библиотека для unix подобных систем (.lib для windows)
Благодарю за обучение,хорошо объясняете.
Спасибо