New user registration is currently disabled due to spam abuse / Регистрация новых пользователей в настоящее время приостановлена из-за злоупотреблений спаммерами

Поддержка MSVC

Ветка для общения разработчиков и координации разработки

Поддержка MSVC

Postby ikm » Thu Apr 30, 2009 9:53 am

Есть несколько вопросов:

1) Почему бы не поместить stdint_msvc.h куда-нибудь в winlibs/include/msvc под именем stdint.h и сделать, чтобы этот путь цеплялся на MSVC-сборках? Писать в каждом файле, где надо подключить stdint.h ifdef для MSVC - увольте.
2)
Code: Select all
+#if QT_VERSION >= 0x040500
   setMovable( true );
+#endif
Какое отношение это имеет к MSVC? Что это вообще за хренотень в куче мест?! Зачем коммитить такие изменения?
3)
Code: Select all
+#ifndef _MSC_VER
+__attribute__((packed))
+#endif
А если def _MSC_VER? MSVC и GCC версии будут несовместимы по форматам индексов и будут падать на не своих?

Вообще, надо сделать какой-то универсальный макрос для packed, а лучше взять готовый. Никакого интереса писать ifdef'ы нет.

4) trunk/src/winlibs/include/zip.h:
Code: Select all
+#ifndef ssize_t
+#define ssize_t int
+#endif
Что это такое? ssize_t не макрос. Данный код всегда будет определять ssize_t как int. Не надо такое делать.

5) Что за stub_msvc.h?

6)
Code: Select all
     TRY_LANG( "ny", QCoreApplication::translate( "Hunspell", "Chichewa" ) )
-    TRY_LANG( "oc", QCoreApplication::translate( "Hunspell", "Occitan" ) )
+               readableNameSucceeded = false;
+
+       if (readableNameSucceeded == false)
+       {
+       TRY_LANG( "oc", QCoreApplication::translate( "Hunspell", "Occitan" ) )
     TRY_LANG( "oj", QCoreApplication::translate( "Hunspell", "Ojibwa" ) )
     TRY_LANG( "om", QCoreApplication::translate( "Hunspell", "Oromo" ) )
С какой целью произведено это изменение? Если цель какая-то есть, в код должен быть добавлен комментарий по этому поводу. А если нет, то зачем оно производилось?
ikm
Автор GoldenDict
 
Posts: 1595
Joined: Wed Feb 04, 2009 10:40 am

Re: Поддержка MSVC

Postby Ars » Thu Apr 30, 2009 11:16 am

по 1) - согласен, так будет лучше.
2) - а вот это, видать, какой то косяк в дистрибе Qt для студии. Версия 4.5.0, но без этого дефайна некоторые методы не понимает. Скачаю последний СДК, с ним проверю еще, может уже починили. Иначе не будет собираться...
3) - согласен, нужно бы макросом по хорошему, но для студии для этого придется каждую пакованую структуру прагмами оборачивать.
4) - ssize_t студия не понимает, ок, вынесу определение в заголовок тогда.
5) - тоже проблемы чисто студийных либ, в которых некоторые функции имеют другие имена. Вынес в отдельный заголовок. Вообще есть смысл скрестить это с stdint_msvc.h.
6) - у студийного компилятора, ограничение на if..else - не более 128 подряд. Пришлось порезать код на 2 части.
Ars
 
Posts: 119
Joined: Sat Feb 21, 2009 11:03 pm

Re: Поддержка MSVC

Postby ikm » Thu Apr 30, 2009 11:36 am

2) Это не косяк, это у тебя просто-напросто версия Qt 4.4.x. Ты этими ifdef-ами просто отрезал часть функционала программы, который зависит от Qt 4.5. Можно поинтересоваться, что это за мода такая: выкинем печень, с ней не собирается? Пожалуйста, не надо больше так делать.
4) Ну пускай не понимает, НО SSIZE_T ЭТО НЕ МАКРОС! Что за #ifndef ssize_t ?!
5) Аналогично пункту 4. Имена функций препроцессор не знает -- что это за #ifdef strcasecmp ?
6) Ок, но тогда следовало оставить там комментарий. Все места, где возникает вопрос, а нафига собственно тут это сделано, должны быть прокомментированы, иначе один внесет изменения, другой сотрет, первый проматерится и опять внесет, и так до бесконечности.

Чтобы больше не возникало вопросов по пунктам 4 и 5, вопрос на засыпку: работает ли этот код?

Code: Select all
typedef int sometype;
void somefn();

#ifndef sometype
#error There is no sometype
#endif

#ifndef somefn
#error There is no somefn
#endif
ikm
Автор GoldenDict
 
Posts: 1595
Joined: Wed Feb 04, 2009 10:40 am

Re: Поддержка MSVC

Postby Ars » Thu Apr 30, 2009 12:29 pm

по 2) - Скорее всего в дистре неправильно определена версия, я ставил 4.5.0 вроде как. Проверю вечером более детально, что не так.
4) - Точно. Надо было #ifndef _SSIZE_T. Проглядел. Спасибо. (код конечно не будет работать...)
5) - А это не ошибка. Функция strcasecmp не определена в студийных инклудах. Вместо этого делается дефайн на stricmp (помоему так, кода нет под рукой сейчас) в хедере, который подключается только для студии. Я не придумал, как это лучше сделать.
6) - ок, напишу комент по этому поводу.

Да, а какой alignment имеет __attribute(packed)__ ? 1, если я не ошибаюсь? (это я к тому, чтобы правильную прагму написать для студии).
Ars
 
Posts: 119
Joined: Sat Feb 21, 2009 11:03 pm

Re: Поддержка MSVC

Postby ikm » Thu Apr 30, 2009 12:42 pm

Да, один. В принципе, gcc поддерживает и pragma pack, но оно работает в нём не на всех архитектурах.
ikm
Автор GoldenDict
 
Posts: 1595
Joined: Wed Feb 04, 2009 10:40 am


Return to Разработка

Who is online

Users browsing this forum: No registered users and 10 guests