Обеспечение совместимости DEV++ с кодом/заголовками из Turbo C++

Я работаю на фабрике, где 80% нашего оборудования использует интерфейс MS-DOS. Ни у кого из наших инженеров нет опыта программирования на c/c++, и нас попросили добавить некоторые функции в интерфейс машины. Наша группа автоматизации отказалась от платформы MS-DOS в пользу элементов управления Allen-Bradley. Я чувствую себя амбициозным и решил взяться за этот проект, хотя у меня почти нет опыта работы с C/C++.

К вопросу:

Все программы были написаны и скомпилированы на Turbo C++. Я бы предпочел использовать DEV++ по разным причинам (простота использования, дополнительные заголовки, более развитая платформа C++ и т. д.). Проблема в том, что существующее программирование сильно зависит от нестандартных заголовков из TC++. В исходном коде есть около 10 заголовков, недоступных в DEV++, и переписать код с использованием более современных конструкций невозможно; мы бы потеряли ту небольшую поддержку, которую мы имеем от нашего AG, времени и т. Д.

Есть ли способ добавить все заголовки из TC++ в DEV++? Например, добавление Graphics.h в DEV++ и будет ли он полностью функциональным? Я попытался добавить его в папку include, вызвав его с помощью #include"graphics.h", и если DEV++ удается его распознать, он выдает массу ошибок компиляции, потому что он не распознает внутренние команды в файле graphics.h. файл.

К сожалению, я не могу включить какой-либо пример кода из этого проекта из-за политики неразглашения и копирования-записи.

Мой опыт программирования: DABBLE в RSLogigx500,5000; Arduino IDE (не судите строго); Паркер 6К; панель просмотра; ~ 40 часов самостоятельного изучения C и C++.

Любая помощь приветствуется.

ОБНОВЛЕНИЕ Очень полезная информация. Кажется, что это невозможно, учитывая устаревшее оборудование и ограничения, которые у меня есть в этом проекте, но спасибо всем за ваш вклад.


person tsmetana    schedule 07.09.2015    source источник
comment
Dev C++ устарел и больше не должен использоваться, вместо этого рассмотрите возможность использования Code::Blocks.   -  person AntoineB    schedule 07.09.2015
comment
C и C++ — это не один и тот же язык. Обязательно изучите их последние версии (т.е. как минимум C99, а еще лучше C11- и C++11). Используйте последние версии GCC или компиляторы Clang/LLVM (в командной строке)   -  person Basile Starynkevitch    schedule 07.09.2015
comment
А стандартные C11 и C++11 не имеют графики. Вам нужна какая-то специфичная для ОС (или мультиплатформенная) структура, возможно, Qt или GTK или libsdl и т. д. и т. д.... Кстати , разработка в системе Linux может очень помочь. Вы также можете рассмотреть веб-интерфейсы (например, с использованием некоторой библиотеки HTTP-сервера, такой как libonion....)   -  person Basile Starynkevitch    schedule 07.09.2015


Ответы (2)


Это скорее «длинный комментарий», чем прямой ответ на ваш вопрос, который пытается помочь вам лучше понять, что МОЖЕТ быть вашей проблемой в вашем проекте.

Лично я бы выбрал более «профессиональный» инструмент разработки уровня. Либо Eclipse (позитив в том, что он переносимый и выглядит/чувствует себя одинаково независимо от того, используете ли вы Windows или Linux), XCode (работает только на Mac) или Visual Studio (который работает только на Windows). Это полнофункциональные интегрированные среды разработки, и все они очень удобны. Все они бесплатные или почти бесплатные.

Компиляция СТАРОГО кода, написанного для DOS, в современный компилятор в современной ОС может быть довольно сложной задачей, в зависимости от того, что делает приложение и насколько в плане предположений о его среде написан код:

  • предполагает ли int 16 бит
  • вызывает ли он прямой доступ к DOS для получения информации о файле, открытия/чтения/записи/закрытия файлов
  • он делает необработанный ввод с клавиатуры
  • выводит символы и/или пиксели прямо на экран
  • использует ли он указатели far и near, есть ли драйвероподобные компоненты, которые напрямую взаимодействуют с аппаратными прерываниями

Одна вещь, которая выделяется в вашем вопросе, - это упоминание graphics.h, которое, я считаю, очень специфично для Borland. Это означает, что вам придется написать свои собственные функции замены - либо набор функций замены graphics.h (я ожидаю, что большая часть функций доступна в любой современной ОС, это больше случай "как это называется и что мне нужно для того, чтобы вызвать эту функцию"). Это может быть довольно сложной задачей само по себе.

Сложность здесь заключается не только в том, чтобы определить, что делает код, но и в том, чтобы заменить его аналогичной логикой, которая делает то же самое в вашей новой среде.

И, конечно же, все зависит от того, что вы хотите делать с кодом, насколько хорошо он написан — является ли он хорошо модульным, делает ли каждая функция одну и только одну вещь, или есть функции, которые «это вычисляет значение , а затем считывает некоторые данные с диска, затем выполняет некоторые операции ввода-вывода на экран, а затем обращается к некоторому внешнему оборудованию, и, поскольку он часто получает вызовы, также обновляет время на экране, если оно изменилось».

person Mats Petersson    schedule 07.09.2015
comment
Благодарю за ваш ответ. К сожалению, переписывание заголовков для исходного кода сопряжено со слишком большим риском (он управляет дорогостоящим оборудованием, должен иметь сертификат OSHA и т. д.). Особенно, если их переписываю сам... Просто подружусь с TurboC++. - person tsmetana; 07.09.2015
comment
@tsmetana: Тогда вы все равно сломаете свое дорогое оборудование. По крайней мере, потратьте месяцы на изучение C и C++, т.е. разрабатывая и экспериментируя на ноутбуке с Linux. TurboC++ даст вам только вредные привычки и не очень полезен (плохой компилятор, несовместимость со стандартами и т. д.). - person Basile Starynkevitch; 07.09.2015
comment
Я не знаком с соблюдением требований OSHA, но я ожидаю, что это НЕ то, без чего я бы не стал: 1) обучение написанию кода для OSHA, 2) уже хороший опыт программирования. - person Mats Petersson; 07.09.2015
comment
Я ценю заботу. Ни один из новых кодов не будет взаимодействовать с контроллером движения на машинах (любой код, который это делает, требует соответствия требованиям OSHA); однако заголовки устанавливают связь с контроллером, поэтому они не будут изменены. Что бы я ни написал, это должно быть одобрено на много уровней выше меня, просто никто больше не хочет это писать. У меня есть 6 месяцев, чтобы придумать рабочий код, и я подумал, что было бы неплохо освоить новый навык. У меня есть 2-летний опыт программирования, но почти полностью в ПЛК, а это совсем другое животное. - person tsmetana; 07.09.2015

Большинство заголовков из старого Turbo C в некотором роде представляют собой просто API MSDOS. Таким образом, нет никакого смысла пытаться использовать эти заголовки в любой другой среде, и вы не можете перенести их в компилятор Windows. Точно так же graphics.h относится к графической библиотеке Borland для DOS, называемой BGI, и не будет работать ни с каким другим компилятором.

Следует отметить, что старый Turbo C++ (я полагаю, версия 3.1?) не очень следовал стандартам C или C++. Версия C++, которую он использовал, полностью устарела.

Также обратите внимание, что Dev C++ IDE устарела и больше не обновляет компилятор GCC. CodeBlocks IDE — лучшая альтернатива.

person Lundin    schedule 07.09.2015
comment
Я не знаю, на какой версии TurboC++ была написана исходная программа, но я использую версию 4. Я довольно ограничен тем, насколько сильно я могу изменить исходный код, поэтому я могу просто продолжать работать с TurboC++. Из того, что вы сказали, не похоже, что какой-либо другой IDE/компилятор позволит мне оставить исходный код в покое. Одна из причин, по которой я хотел перейти на другую IDE, заключается в том, что TC++ очень древний. Это, и даже исходный код слишком длинный, чтобы скомпилировать его за один раз, создание составного проекта — это еще одна вещь, которую мне придется изучить. Спасибо за ваш вклад. - person tsmetana; 07.09.2015