= Сообщение: 57 из 1947 =========================================== RU.BINKD = От : Pavel Gulchouck 2:463/68 18 Oct 13 11:15:22 Кому : Roman Trunov 18 Oct 13 11:15:22 Тема : То ли лыжи не едут... FGHI : area://RU.BINKD?msgid=2:463/68+5260f11e На : area://RU.BINKD?msgid=2:5022/2+52614fdc = Кодировка сообщения определена как: CP866 ================================== Ответ: area://RU.BINKD?msgid=2:5020/4441.1+5261108b ============================================================================== Hi Roman!
18 Oct 13, Roman Trunov ==> Pavel Gulchouck:
PG>> Hет ли у MSVC опции считать int (или хотя бы long) 64-битным на 64-битной PG>> системе? Боюсь, если handle (socket, size_t, time_t, void* и т.д.) по PG>> размеру больше, чем int, там ещё много граблей вылезет. :(
RT> Микрософт в своем репертуаре. С переходом на 64-битность прототипы некоторых библиотечных функций MSVC ВHЕЗАПHО RT> изменились. Hапример, если в VC2000 мы видим
RT> long _findfirst(const char *, struct _finddata_t *);
RT> где intptr_t - целочисленный тип, в который влезет закастованный указатель. Hа архитектуре amd64 это int64.
RT> Решение на самом деле очень простое - один раз таки прочитать ВСЕ предупреждения компилятора про преобразования int64 RT> => int и разобраться с ними на месте (на time_t обычно можно забить, если только оно не в printf идет, остальные RT> пофиксить)
Обычно так и делается. Проблемы две: во-первых, с появлением новой версии компилятора появляются новые предупреждения (как в том примере, что ты привёл), а во-вторых, исправление предупреждения для одного компилятора/системы/архитектуры может привести к появлению предупреждений или ошибок для другого компилятора/системы/архитектуры. Если там прописать intptr_t - точно ли оно будет собираться и без ошибок работать под mingw, например? Там вообще есть такой тип? Поэтому, чтобы исправлять, недостаточно посмотреть на warnings, нужно представлять себе, как это исправление скажется в других случаях. Благо, обсуждаемое место специфично для винды, и тестировать его под unix и os/2 не нужно.
А стандартных (переносимых) средств нет для многих базовых задач. В этом случае проблема вызвана отсутствием в MSVC функций opendir()/readdir()/closedir(), т.е. нельзя даже прочитать содержимое каталога так, чтобы это было переносимо. :-(