|
Программирование >> Перегруженные имена функций и идентификаторы
Можно ли перенести под Ватком программы, написанные с применением OWL или TVision? OWL - скорее всего нет, поскольку он построен на расширениях синтаксиса, которые не обрабатывается компилятором Ватком. Для переноса TVision есть несколько вариантов. Существуют diffi для преобразования TV под GNU C++ (продукт называется GVISION. Это не решает разом все проблемы, естественно, но по крайней мере этот вариант TV заточен под 32 бита и флат модель. Совсем недавно стали доступны два порта TV под Watcom C++. Первый - это перенос под полуось и dos4gw TV 1.0. Второй имеет внутри маленькую доку и собственно сырец+makefile. Доку рекомендуем внимательно прочесть - может пригодится при перекомпиляции ваших программ. В моей программе используются inline ассемблер и псевдорегистры, смогу ли я заставить их работать под Ваткомом? Нет. Придется переписать на встроенном ассемблере, либо вынести в отдельный .asm модуль. С 11 версии поддерживает стиль a la Borland: asm ... А нельзя ли кaк-нибyдь на вaткoмe реализовать AX из Borland? А то переношу под него библиотеку, a там они активно юзаются Если вам AX нужен на read-only, то можно сделать прозрачно: === Cut === short reg ax ( void ) ; #define AX reg ax() #pragma aux reg ax = \ value [ax] #if defined( 386 ) defined( FLAT ) int reg eax ( void ) ; #define EAX reg eax() #pragma aux reg eax = \ value [eax] #define rAX reg eax() чтобы не задумываться о контексте #else #define rAX reg ax() #endif === Cut === А если для модификации, то лучше не полениться и сделать как просит Ватком (то бишь оформите этот фрагмент как inline-asm). Встречается проблема, когда надо собирать смешанный проект - часть модулей компилится Ваткомом, а часть Борландом (например ассемблером). Линкер падает по трапу, вываливается с бредовыми ошибками и вообще ведет себя плохо. Что делать? Ha худой конец есть способ: борландовый obj->wdisasm->.asm->wasm-> ваткомовский А дальше это отдавать как обтчно wlinky. Есть еще народное средство - нужно взять tasm 3.2, а еще лучше tasm 4.0, последний хорош тем, что имеет режимы совместимости по синтаксису со всеми своими предками... Или TASM32 5.0 с патчем (обязательно 32 bits) При задании надписей заголовков окон, меню, кнопок и т.п. на русском языке все прекрасно видно пока я нахожусь в режиме дизайнера. Стоит только запустить созданную аппликуху - кириллица исчезает напрочь. Замените WRC.DLL из поставки Optima 1.0 на WRC.EXE из поставки Watcom 11.0 и все придет в норму. Какой компилятор C (C++) лучше всех? Что лучше: Watcom C++ или Borland C++? Посоветуйте самый крутой компилятор?! Смотря для чего. Если нужна многоплатформенность и хорошая кодогенерация, то лучше - Ватком. Но следует учитывать, что производство Ваткома прекращено и компилятор уже не соответствует в полной мере стандарту C++, и уже никогда не будет соответствовать. А вот для разработки приложений под Win32 лучше будет Borland C++ Builder, хотя качество кодогенерации у него ниже и ни о какой многоплатформенности говорить не приходится. Что же касается BC++ 3.1 - это не более, чем учебный компилятор, и он уже давно забыт. Не следует забывать и о gcc, который есть подо все мыслимые платформы и почти полностью поддерживает стандарт, однако он (точнее, его Win32 версия - cygwin) не слишком удобна для создания оконных Win32 приложений, с консольными - все в порядке, причем консольные приложения можно создавать и досовой версией - djgpp, дополненной пакетом rsxnt. А вообще - рассуждать, какой компилятор лучше, достаточно бесполезное занятие. Идеального компилятора не существует в природе. Совершенно негодные компиляторы не имеют широкого распространения, а тот десяток компиляторов (не считая специфических кросс-компиляторов под разные встроенные системы), которые имеют широкое распространение, имеют свои достоинства и недостатки, так что приходится подбирать компилятор, наиболее подходящий для решения конкретной задачи. Есть ли в Watcom встроенный ассемблер? Встроенного asma у него на самом деле нет. Есть правда возможность писать asm-функции через #pragma aux .... Например: #pragma aux DWordsMover = \ mov esi, eax , \ mov edi, ebx , \ jcxz @@skipDwordsMover , \ rep movsd , \ @@skipDWordsMover: , \ parm [ebx] [eax] [ecx] modify [esi edi ecx] void DWordsMover(void* dst, void* src, size t sz); В версии 11.0 точно имеется asm{}. BC не хочет понимать метки в ассемблерной вставке - компилятор сказал, что не определена эта самая метка. Пришлось определить метку за пределами ASM-блока. Может быть есть более корректное решение? Загляни в исходники RTL от BC++ 3.1 и увидишь там нечто красивое, например: #define I asm ........ I or si,si I jz m1
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |