Страницы

Поиск по вопросам

Показаны сообщения с ярлыком borland. Показать все сообщения
Показаны сообщения с ярлыком borland. Показать все сообщения

понедельник, 24 февраля 2020 г.

C++. Чем заменить тип huge компилятора Turbo C в GCC MinGW?

#c #mingw #borland #типы


Есть кусочек кода программы компилируемой в Borland Turbo C.
Там есть такое объявление:

huge x[240001];


При попытке скомпилировать эту строку компилятором GCC (MinGW32) происходит ошибка: 


  huge does not name a type.


Соответственно вопросы:

1) Что за тип такой huge? Каков sizeof() в байтах?

2) Это структура или что?

3) Где объявлен этот тип? В каких заголовочных файлах?

4) Чем его можно заменить в GCC (MinGW32)?

P.S. Желательно точное соответствие замены, т.к. важен размер, порядок байт при считывании/записи
массива x[240001], 10 байт пишется в файл fwrite(x,10,240000,ou);.
    


Ответы

Ответ 1



О какой версии компилятора идет речь? Просто начиная с версии 3.0 компилятор назывался просто Borland C++, без Turbo. Так что я вынужден считать, что речь идет о Turbo C 2.0. Тогда... Тогда это были 16-разрядные программы, которые работали в DOS в реальном режиме работы процессора, так что указатели там состояли из сегмента и смещения... Вобщем, рассказывать долго, почитайте лучше сами - например, тут или тут или где-нибудь еще. Соответственно, у вас просто выделен массив памяти с использованием такого указателя памяти, ну, а пропущенный тип в C всегда воспринимался как int. Так что это должен быть просто int x[240001];. Только учтите, что int тогда представлял собой 16-битное значение. Что до fwrite - то в приведенной у вас записи в файл пишется 240000 раз по 10 байт. Это смущает, потому что такой памяти под DOS просто не было - вся она была ограничена 640КБайтами. Так что, может, поделитесь исходником - выложив его где-то? Просто интересно посмотреть и разобраться, что же это такое программа пытается сделать. "По-моему, так" (с) Пух

воскресенье, 16 февраля 2020 г.

C++. Чем заменить тип huge компилятора Turbo C в GCC MinGW?

#c #mingw #borland #типы


Есть кусочек кода программы компилируемой в Borland Turbo C.
Там есть такое объявление:

huge x[240001];


При попытке скомпилировать эту строку компилятором GCC (MinGW32) происходит ошибка: 


  huge does not name a type.


Соответственно вопросы:

1) Что за тип такой huge? Каков sizeof() в байтах?

2) Это структура или что?

3) Где объявлен этот тип? В каких заголовочных файлах?

4) Чем его можно заменить в GCC (MinGW32)?

P.S. Желательно точное соответствие замены, т.к. важен размер, порядок байт при считывании/записи
массива x[240001], 10 байт пишется в файл fwrite(x,10,240000,ou);.
    


Ответы

Ответ 1



О какой версии компилятора идет речь? Просто начиная с версии 3.0 компилятор назывался просто Borland C++, без Turbo. Так что я вынужден считать, что речь идет о Turbo C 2.0. Тогда... Тогда это были 16-разрядные программы, которые работали в DOS в реальном режиме работы процессора, так что указатели там состояли из сегмента и смещения... Вобщем, рассказывать долго, почитайте лучше сами - например, тут или тут или где-нибудь еще. Соответственно, у вас просто выделен массив памяти с использованием такого указателя памяти, ну, а пропущенный тип в C всегда воспринимался как int. Так что это должен быть просто int x[240001];. Только учтите, что int тогда представлял собой 16-битное значение. Что до fwrite - то в приведенной у вас записи в файл пишется 240000 раз по 10 байт. Это смущает, потому что такой памяти под DOS просто не было - вся она была ограничена 640КБайтами. Так что, может, поделитесь исходником - выложив его где-то? Просто интересно посмотреть и разобраться, что же это такое программа пытается сделать. "По-моему, так" (с) Пух

воскресенье, 12 января 2020 г.

Портирование библиотеки

#c #borland


Я использую Open Watcom копилятор для сборки DOS 16 приложения под 80188 подобную
архитектуру. Проблема заключается в том, что я не могу подключить библиотеку собранную
в BC 3.1. После, казалось бы, успешной линковки, при использовании некоторых функций
из этой библиотеки, я получаю сообщения от линковщика, что не найден символ _malloc()
или _free(). Использование функции malloc() в пользовательском коде проходит линковку. 
Как я понял проблема возникает только, когда какя либо функция библиотеки вызывает
malloc() или free(), то есть библиотека нифига не стэндалон и тянет зависимости из
стандартной бибилотеки собранной для BC 3.1. Проверить это я никак не могу и пересобрать
библиотеку тоже, так как ее исходников нет. 
Всвязи с этим у меня вопрос: как портировать билиотеку на Open Watcom ? malloc()
и free() есть в библиотеках Open Watcom но их символы скомпилированы видимо не так
как того ожидает борландовская библиотека.    


Ответы

Ответ 1



Ну да, похоже что библиотека BC из себя обращается к malloc() и free(), ожидая при этом имена в формате с подчёркиванием в начале. А в библиотеках Watcom эти функции могут быть без подчёркивания, или вообще с подчёркиванием в конце... Проверить это можно просто посмотрев дамп имён ваткомовской библиотеки (clib кажись). wlib из их стандартной поставки должен это уметь, а может и wlink... Если там не обнаружится имён _malloc и _free, то самый простой выход - сделать свои обёртки: void * _malloc( size_t sz ) { return malloc(sz); }; void _free( void * mem ) { free(mem); }; И линковать их с проектом. UPD: Таки проверил. Действительно, Open Watcom 1.8.0, clib3r.lib (register calling): free_ .... nfree.c malloc_ .... nmalloc.c И для clib3s.lib (stack calling, чего борланд и ожидает): free .... nfree.c malloc .... nmalloc.c Так что - обёртка.

пятница, 10 января 2020 г.

Функции из <algorithm> в borland turbo c++

#cpp #include #borland


На древнем borland turbo c++ для dos надо запустить программу, которая, предположим,
сортирует массив. Насколько я знаю, в borland turbo c++ заголовочного файла с названием
"algorithm" нет.

В таком случае, какую библиотеку сюда подключать?
    


Ответы

Ответ 1



Если вам нужна сортировка, то вы можете использовать стандартную C библиотеку и использовать функцию qsort. Думаю, что и в библиотеках Turbo C++ также где-нибудь определена функция sort. Если я не ошибаюсь, то в Turbo C++ входит Turbo Vision. Вы можете посмотреть библиотеки этого пакета. Также в Turbo C++ должна входить встроенная онлайн документация. И кроме того вы можете поискать в интернет соответствующий материал. Можно найти список заголовочных файлов. Сортировка может быть в заголовке , если таковой имеется:).

Ответ 2



Как минимум все заголовочники в BC++ имеют расширение .h и нет namespace'ов. В версии BC++ 3.1 (не Turbo) действительно нет algorithm.h, так что выкручиваться другими доступными способами, к примеру, используя stdlib.h + qsort. Если не изменяет память, то всякие STLport саппортят борландовский компилятор только версии с пятой. Ну и десерт: https://stackoverflow.com/questions/1961828/why-not-to-use-turbo-c Turbo C is a real real old, and an ancient compiler и далее: Besides, there are lots of problems with Turbo C++(Im kinda sure TC3 is being used). I have no idea absolutely how you are going to convince them! :P Its 16 bit (Since I am also from Mumbai University, I am pretty much sure, you people must be using TC3; 32 bit version of the compiler is also avaible) The maximum amount of memory that a program can use is 2^16 = 64 KB, which is very small as compared to modern day programs! The programs are more like console based -- ie, I doubt if you can make real great programs using it. Debugging is not as efficient as they are in other IDEs It does not conform with the standards that are laid down You can never learn the concepts like exceptions, templates (which are now at the heart of C++ ) and like with TurboC++ The compiler does not support modern casts, only C-Style casts. No STL And I doubt if it goes well with 3rd party libraries! eg database or graphics libraries. The compiler has bugs and does not issue proper diagnostic messages for erroneous programs. You end up learning C with classes instead of C++ (kind of) :D :P

среда, 27 февраля 2019 г.

Функции из в borland turbo c++

На древнем borland turbo c++ для dos надо запустить программу, которая, предположим, сортирует массив. Насколько я знаю, в borland turbo c++ заголовочного файла с названием "algorithm" нет.
В таком случае, какую библиотеку сюда подключать?


Ответ

Если вам нужна сортировка, то вы можете использовать стандартную C библиотеку и использовать функцию qsort
Думаю, что и в библиотеках Turbo C++ также где-нибудь определена функция sort. Если я не ошибаюсь, то в Turbo C++ входит Turbo Vision. Вы можете посмотреть библиотеки этого пакета.
Также в Turbo C++ должна входить встроенная онлайн документация. И кроме того вы можете поискать в интернет соответствующий материал.
Можно найти список заголовочных файлов. Сортировка может быть в заголовке , если таковой имеется:).