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