Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Условия успешной компиляции STL разными компил. 
:(
    Опции темы
EnergoHokum
Дата 4.5.2008, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Хочу спросить: какие действия нужно предпринять (и нужно ли), чтобы код с использованием STL компилировался разными компиляторами (если он будет ещё и работать -- вообще идеально). То-есть, если я собираю GCC-ом вот такое,
Код

int Function(const std::multimap<std::string,std::string>& functionParam)
{
    //всякое разное
}

будет ли оно нормально работать под MSVC, на разных платформах (x86-32, x86-64)? Что нужно сказать компилятору (выравнивание, проч.)?
PM MAIL ICQ   Вверх
Daevaorn
Дата 4.5.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



100% гарантий дать не возможно. А условий всего 2:
- код должен быть как можно более близок к стандарту
- компилятор должен быть как можно более соответствующий стандарту
PM MAIL WWW   Вверх
EnergoHokum
Дата 4.5.2008, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



То-есть "опыт, сын ошибок трудных"? Мне предлагают преобразовать эту мультикарту в массив C-строк и передавать указатель на него, но мне такое "решение" не нравится сильно.
PM MAIL ICQ   Вверх
vinter
Дата 4.5.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(EnergoHokum @  4.5.2008,  10:06 Найти цитируемый пост)
будет ли оно нормально работать под MSVC, на разных платформах (x86-32, x86-64)

будет


--------------------
Мой блог
PM MAIL WWW   Вверх
just_geek
Дата 4.5.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 2
Всего: 10



Лучше перестраховатся и воспользоватся STLport'ом.
PM MAIL   Вверх
JackYF
Дата 4.5.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Блин, да что в этом элементарном коде может не скомпилиться? При условии, что MSVC >= 7.0, проблем быть не должно 99,9%.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
EnergoHokum
Дата 4.5.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



Я немного неправильно понял условия (и, соответственно, выразился). Правильнее так: если код, передающий мультикарту, скомпилирован одним компилятором (пусть MSVC), а принимающий -- другим (MinGW-GCC)могут-ли различия в реализациях STL-евских контейнеров испортить мне жизнь? Как я помню, на именно реализацию контейнеров ограничения не накладываются.
PM MAIL ICQ   Вверх
JackYF
Дата 4.5.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(EnergoHokum @  4.5.2008,  11:27 Найти цитируемый пост)
Правильнее так: если код, передающий мультикарту, скомпилирован одним компилятором (пусть MSVC), а принимающий -- другим (MinGW-GCC)могут-ли различия в реализациях STL-евских контейнеров испортить мне жизнь?

Вот тут >50%, что испортят. Конечно, реализации разные. И тут уже надо пользоваться либо сериализацией, либо одинаковыми компиляторами, либо возвращаться к примитивам.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
vinter
Дата 4.5.2008, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



JackYF, поведение контейнеров стандартизировано. И его методы будут вести себя что в гцц что в мцц, одинаково. Реализация контейнера по моему волновать юзера должна ровно настолько, насколько обычного жителя города волнует проблема надоев в Псковской губернии.


--------------------
Мой блог
PM MAIL WWW   Вверх
EnergoHokum
Дата 4.5.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



To vinter: На RSDN-е есть руководство по STL, написанное Степановым и Ли, там приводится примеры для контейнеров, в частности для std::multimap. Эти примеры являются эталонной реализацией, или контора-производитель (КПр) может их корёжить по своему? Другими словами, КПр может добавить/урезать какие-нить внутренние служебные переменные контейнера? Функции?
PM MAIL ICQ   Вверх
JackYF
Дата 4.5.2008, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(vinter @  4.5.2008,  13:14 Найти цитируемый пост)
поведение контейнеров стандартизировано.

Поведение, но не бинарное представление, которое при передаче параметров будет давать феерические глюки.

Цитата(EnergoHokum @  4.5.2008,  13:48 Найти цитируемый пост)
или контора-производитель (КПр) может их корёжить по своему? Другими словами, КПр может добавить/урезать какие-нить внутренние служебные переменные контейнера? Функции? 

Конечно, может, и даже очень нужет smile Стандартизирован лишь интерфейс и стандарт поведения.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
EnergoHokum
Дата 4.5.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



То-есть, получается, что для корректной передачи содержимого контейнеров разных КПр мне нужно вручную вынуть это содержимое из одного контейнера, и так-же вручную затолкать в другой (STLPort не рассматриваем)? 
PM MAIL ICQ   Вверх
vinter
Дата 4.5.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(JackYF @  4.5.2008,  16:51 Найти цитируемый пост)
Поведение, но не бинарное представление, которое при передаче параметров будет давать феерические глюки.

а причем тут бинарное представление? мы его по битам разбираем используя конкретные смещения? мы используем интерфейс, который будет работать всюду. Если я не прав, то приведи пример.


--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 4.5.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(vinter @  4.5.2008,  17:51 Найти цитируемый пост)
а причем тут бинарное представление? мы его по битам разбираем используя конкретные смещения? мы используем интерфейс, который будет работать всюду. Если я не прав, то приведи пример. 


При использовании двух описаний класса (а в случае с двумя компиляторами иного предполагать не логично)
 -  смещения будут подсчитаны по разному ( хотя бы если переменные стоят не в том порядке).

Чтоб избежать проблем между передачей данных между одинаковыми классами разных описаний можно:

1. использовать  "чистые" абстрактные классы 
2. передавать данные как с-блок 
3. использовать общий прокотол передачи данных.




Это сообщение отредактировал(а) mes - 4.5.2008, 18:21


--------------------
PM MAIL WWW   Вверх
vinter
Дата 4.5.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



все понял о чем вы smile

mes, JackYF, +1


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0653 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.