Seva
Попробуй как-нибудь собрать проект под gcc
Anatoly
Каждый c++ файл - самостоятельная единица, после обработки препроцессора превращающаяся в единицу трансляции. Единица трансляции поступает на вход компилятора и получается объектный файл. Объектные файлы поступают на вход линковщику, который ресолвит все вызовыи переменные и получает исполняемый файл.
Seva
Нет, на хедеры относительно пофиг
Seva
Все, что делает хедер -- декларирует функцию
Seva
Это обещание, что в другом объектном файле она будет определена
Денис
Это обещание, что в другом объектном файле она будет определена
Примерно понял. То есть, вызов функции обудет по сигнатуре?
Денис
Ай, не, не понял.
Денис
Лан, чтобы ваше время не тратить, я почитаю по ссылкам. Если останутся вопросы - я задам.
Seva
Примерно, у тебя есть мэпа из сигнатуры в адрес вызова
Seva
Во время линковки адреса заменяются на реальные
Денис
Во время линковки адреса заменяются на реальные
Просто тогда не понимаю идеи хедера. По сути я могу объявить функцию в 1-ом срр, а во втором расписать ее. Не связиывать это все хедером, и по логике 1срр должен нормально увидеть функцию из 2-го срр.
Денис
Но тогда компилятор выдаст мне ошибку =)
Денис
Если появятся вопросы, @supapro
А в чем отличие этого... ааааа, для начинающих -увидел =)
Anatoly
Просто тогда не понимаю идеи хедера. По сути я могу объявить функцию в 1-ом срр, а во втором расписать ее. Не связиывать это все хедером, и по логике 1срр должен нормально увидеть функцию из 2-го срр.
Я могу бе хедера и там и там объявить фунцию, а в третьем ее определить. Хедер (кусок кода) нужен для согласования объявлений/определений.
Денис
Я могу бе хедера и там и там объявить фунцию, а в третьем ее определить. Хедер (кусок кода) нужен для согласования объявлений/определений.
То есть, если мы и там и там объявляем одну и ту же функцию, то в первом срр она вызовется и выполнится полностью по сигнатуре?
Seva
На всякий случай, сигнатура функции -- это типа полного имени: имя функции, типы параметров в заданном порядке, квалификаторы, нэймспейсы.
Seva
Да. Попробуй собрать через gcc. Студия скрывает многие важные для понимания вещи.
Anatoly
Хедер это чертеж. Его отдают в токарный цех, сварочный цех (это cpp модули), а после в сборочный (линковщик). Цеха, кроме сборочного, могут работать параллельно.
Денис
Ок, спасибо, ребята =) Дальше сам, думаю, справлюсь =) Если что, направление помню =)
Seva
Йор велкам
Julia ️
Привет про С++ тут же?
Evgenii
это спамер инфа сотка
Evgenii
Привет про С++ тут же?
в каком заголовочном файле находится std::cout?
Julia ️
Да, я HR
Julia ️
☺️
Anonymous
Да, я HR
а эт что,
Anonymous
??
Julia ️
Рекрутер
Anonymous
мммм
Julia ️
Кадровик ?)))
Evgenii
Рекрутер
читай описание
Evgenii
куда вакансии слать
Julia ️
я?
Нет, я
Anonymous
а
Julia ️
Evgenii
👍
Julia ️
Просто не нашла чата с поюсовиками отдельно. Решила у вас спросить
Mar
лоооовко
Подумал о том же, но не был уверен ибо на чистом пишу
Berkus
Да, это я понимать. Я говорю о том, что не понимаю, как он подставляет 2 срр с 1-им хеддером, как понимает, что связка происходит именно между ними.
никак не понимает, #include это ТЕКСТОВАЯ подстановка, .h файл исчезает, его содержимое подставляется вместо него в cpp
Berkus
и этот процесс повторяется пока в тексте не останется ни единой директивы #include
Berkus
остается только срр текст
Evgenii
ну не знаю, у меня в библиотеке std
Berkus
Так.
дальше различные правила компилятора, ODR, инстанциация, потом линкер выкидывает лишнее
Evgenii
я имел ввиду libstdc++ если уж занудничать)
Evgenii
#supapro
Anatoly
Так.
Такое впечатление, что ты не читал, то тебе выше ответили
Evgenii
а что делать с libc++?
заменять ею libstdc++ естественно
Денис
Такое впечатление, что ты не читал, то тебе выше ответили
Я ждал, что дальше будет что-то новое =)
Berkus
можно, но задалбывает примерно после 500 копипейста двухмегабайтных файлов
Berkus
инклюдишь небось?
melvin
какие есть (есть ли вообще) еще способы реализации динамического полиморфизма, кроме диспетчеризации+динамического связывания?
melvin
емнип в плюсах он реализован через vmt
Александр
Вся динамика в virtual
Александр
Любые иные способы - это её мимикация так или иначе
melvin
а если не обязательно в c++
Александр
Динамическая рефлексия тебе позволит почти что угодно
Александр
Да и любые языки с eval()
melvin
оно в интернетах так и называется?
Александр
а вот с этого поподробнее
Ну вот в шарпах, как я помню, можно создать класс по имени, введенному в консоли
melvin
Ну вот в шарпах, как я помню, можно создать класс по имени, введенному в консоли
да, но разве это обеспечивает динамический полиморфизм?
melvin
ну в плюсах такое же примерно
Александр
оно в интернетах так и называется?
По такому запросу не нашел. Видимо, ее называют просто рефлексией. Но не времени компиляции, а времени выполнения
melvin
посылка сообщения, лукап в vmt, выполнение соответствующих методов, разве не так?
Александр
Александр
посылка сообщения, лукап в vmt, выполнение соответствующих методов, разве не так?
Там методы по имени вызываются. Сэмулировать и в плюсах можно, но костыльно