![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
Хочу спросить: какие действия нужно предпринять (и нужно ли), чтобы код с использованием STL компилировался разными компиляторами (если он будет ещё и работать -- вообще идеально). То-есть, если я собираю GCC-ом вот такое,
будет ли оно нормально работать под MSVC, на разных платформах (x86-32, x86-64)? Что нужно сказать компилятору (выравнивание, проч.)? |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
100% гарантий дать не возможно. А условий всего 2:
- код должен быть как можно более близок к стандарту - компилятор должен быть как можно более соответствующий стандарту |
|||
|
||||
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
То-есть "опыт, сын ошибок трудных"? Мне предлагают преобразовать эту мультикарту в массив C-строк и передавать указатель на него, но мне такое "решение" не нравится сильно.
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| just_geek |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 309 Регистрация: 13.12.2007 Репутация: 2 Всего: 10 |
Лучше перестраховатся и воспользоватся STLport'ом.
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Блин, да что в этом элементарном коде может не скомпилиться? При условии, что MSVC >= 7.0, проблем быть не должно 99,9%.
|
|||
|
||||
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
Я немного неправильно понял условия (и, соответственно, выразился). Правильнее так: если код, передающий мультикарту, скомпилирован одним компилятором (пусть MSVC), а принимающий -- другим (MinGW-GCC)могут-ли различия в реализациях STL-евских контейнеров испортить мне жизнь? Как я помню, на именно реализацию контейнеров ограничения не накладываются.
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Вот тут >50%, что испортят. Конечно, реализации разные. И тут уже надо пользоваться либо сериализацией, либо одинаковыми компиляторами, либо возвращаться к примитивам. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
JackYF, поведение контейнеров стандартизировано. И его методы будут вести себя что в гцц что в мцц, одинаково. Реализация контейнера по моему волновать юзера должна ровно настолько, насколько обычного жителя города волнует проблема надоев в Псковской губернии.
|
|||
|
||||
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
To vinter: На RSDN-е есть руководство по STL, написанное Степановым и Ли, там приводится примеры для контейнеров, в частности для std::multimap. Эти примеры являются эталонной реализацией, или контора-производитель (КПр) может их корёжить по своему? Другими словами, КПр может добавить/урезать какие-нить внутренние служебные переменные контейнера? Функции?
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Поведение, но не бинарное представление, которое при передаче параметров будет давать феерические глюки. Конечно, может, и даже очень нужет |
|||
|
||||
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
То-есть, получается, что для корректной передачи содержимого контейнеров разных КПр мне нужно вручную вынуть это содержимое из одного контейнера, и так-же вручную затолкать в другой (STLPort не рассматриваем)?
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
а причем тут бинарное представление? мы его по битам разбираем используя конкретные смещения? мы используем интерфейс, который будет работать всюду. Если я не прав, то приведи пример. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
При использовании двух описаний класса (а в случае с двумя компиляторами иного предполагать не логично) - смещения будут подсчитаны по разному ( хотя бы если переменные стоят не в том порядке). Чтоб избежать проблем между передачей данных между одинаковыми классами разных описаний можно: 1. использовать "чистые" абстрактные классы 2. передавать данные как с-блок 3. использовать общий прокотол передачи данных. Это сообщение отредактировал(а) mes - 4.5.2008, 18:21 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
все понял о чем вы
mes, JackYF, +1 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |