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