Berkus
саттера я уже читал на эту тему, смотреть не буду)
Anonymous
Известно что о 4 издании "язык программирования с++"? Может кто знает. Я просто кроме 3 издания найти не могу что-то
Anonymous
Страуструпа
Anonymous
есть на английском кажется толькко
Berkus
страус не нужен
Anonymous
или уже перевели?
Square
Evgenii
Square
У нас раньше тут активничал парень из российского отделения, даже к icc руку прикладывал. Но чот пропал
Evgenii
я аж задумался, чем хорошо компилятор тестировать
Square
Сложно распутываемым кодом :)
Square
Интел чертяка адски циклы разворачивает и всякое байтоебство творит хитрое
Square
Evgenii
Danil
щас будет глупый вопрос
Danil
а интеловский компилятор подходит только для интелловских процов?
Danil
вики сказала x86, x86-64 и IA-64
Square
Danil
меня на самом деле архитектуры больше интересовали
Square
Ну начить надо было спросить про них)
Danil
а для всяких рисков есть что-то специфичное в плане компилеров?
Danil
или gcc наш лучший друг?
Evgenii
Danil
мипсы, sh4, arm
Danil
для армов знаю есть отдельный gcc
Square
Danil
Square
Не
Square
Всё вроде risc
Danil
х86 - cisc
Square
Ну ок.
Danil
ну под капотом риск, да
Danil
но это маленькие секретики
Anonymous
есть кто Ruby шарит?
Square
Денис
Люди. Я тупой. Ну, правда, тупой.
Я разобрался с указателями, разобрался с шаблонами, классами, ООП, всеми приницпами С++, я понимаю, как делать архетектуру более удачной, чем многие нубы. Я прочитал 3 книги по С++, я зашарил вв идее программирования на уровне памяти - как и что работает, на уровне железа, как лучше делать так, чтобы код был максимально проивзодительный (ну, я утрирую, но суть одна).
И вчера я втупил.
Вопрос дичайше тупой.
Идея h и cpp файлов. Связка понятная - я пишу в срр код, в h я делаю объявления, привязываю h к одному срр, потом привязываю его в второй срр, в котором мне нужен первый срр.
Но вот суть, смысл этого мне далек.
То есть, я не понимаю, почему один хэдер добавлятся в 2 срр, и вдруг эти два срр становятся объедененными. Как компилятор этот момент понимает?
Денис
Я достаточно давно програмлю, но вот эту идею никогда не разбирал и работал с ней на автомате. А вчера решил ее копнуть и понял, что я нихрена не понимаю в файло-образовании в срр
Billy
Врмя 6 утра. В 6 утра никто не понимает ничего.
Денис
Seva
@Den_Kuzn а можешь сами сорцы пошарить? Я правильно понимаю, что ты имеешь в виду объектные файлы?
Денис
Seva
А, так это просто препроцессор
Денис
А, так это просто препроцессор
Да, это я понимать.
Я говорю о том, что не понимаю, как он подставляет 2 срр с 1-им хеддером, как понимает, что связка происходит именно между ними.
Seva
Хедер в текст записанный в нем (по модулю инструкций препроцессора)
Seva
А, кажется понял
Денис
А, кажется понял
Могу расписать еще раз свой вопрос, может, смогу более внятно задать его =)
Seva
Есть хедер, в котором декларируется класс A и класс B. Есть A.cpp с имплементацией A и B.cpp с имплементацией B, так?
Billy
Billy
Anatoly
Anatoly
В с++ header файл кусок кода и никакой семантической нагрузки не несет
Billy
Seva
Тебе не нужна компиляция
Seva
Тебе нужно понять, как устроен механизм линковки
Billy
Компиляция продей всегда. Линковка нет. Почитай про то, как работает компилятор.
Seva
Так сходу нашел статью на Хабре, может кто лучше посоветует: https://habrahabr.ru/post/150327/
Billy
Ахо, Ульман. Компиляторы. - авторы и название книги. 4е издание
Денис
Спасибо всем, понял, что тема не такая простая, и на раз два не дадут ответа =)
Денис
Спасибо за линки на статьи и книги, буду вдымлять
Anatoly
Денис
Простая
Сможешь в двух словах объяснить?
Seva
Ну смотри, так по-простому. Когда ты компилируешь cpp-файлы, ты создаешь бинарники
Seva
В бинарниках записываются сигнатуры методов, которые ты вызываешь.
Денис
Seva
На этапе компиляции вовсе необязательно, что метод с данной сигнатурой будет определен в том же объектном файле, где он вызван
Seva
Задача линковщика взять все объектные файлы и соединить с определениями методов
Seva
Ты можешь стереть одно определение foo2 и посмотреть, какую ошибку получишь
Seva
Кстати, в какой среде ты собираешь проект?
Денис
Денис
Seva
Ох, да, VS может лишать некоторой видимости того, что происходит