Использование библиотек C ++ - PullRequest
1 голос
/ 01 октября 2010

вся наша разработка проекта находится в C. Однако есть много строковых операций здесь и там, и сколько внимания мы уделяем ... мы в конечном итоге имеем ошибки кодирования в строковых операциях, и это приводит к большей части переполнения буфера. .stack повреждения и т. д. из-за ошибки программистов.

Насколько хороша идея использовать строковый класс C ++? Так что просто введение CPP для использования библиотеки строк в нашем проекте ... это хорошая идея? Будет ли это влиять на производительность? Или это просто не хорошо ..

Пожалуйста, оставьте свои комментарии.

Ответы [ 4 ]

2 голосов
/ 01 октября 2010

Почему вы не можете просто использовать функции в string.h ?

Рассматривали ли вы написать простую библиотеку строк в C и расширить ее при необходимости?Таким образом, даже если вы не поймете это сразу, вы (разные разработчики) не будете снова и снова повторять одни и те же ошибки.

Или вы можете просто сделать вашу библиотеку строк C оболочкой изстандартный строковый класс библиотеки C ++.

1 голос
/ 01 октября 2010

Одна из самых приятных вещей в истории C ++ как (в основном) надмножества C состоит в том, что вы можете сделать это просто так, как вы предлагаете. Самая большая проблема у вас будет с malloc / free против new / delete.

Иди и попробуй, тебе нечего терять.

0 голосов
/ 02 октября 2010

По моему опыту, даже обновление компилятора часто ломает код неожиданным образом. Это изменение является языковым изменением. Это серьезное изменение. Каковы шансы, что это не приводит к множеству ошибок, многие из которых могут быть действительно трудными для разработчиков (но легкими для клиента).

Кроме того, я предполагаю, что основная причина, по которой вы используете C вместо C ++, это командный опыт. Еще в 90-х годах мы усвоили сложный способ, которым смешивание ОО и структурированных парадигм вызывает гораздо больше проблем, чем придерживаться одной или другой парадигмы. Если ваша команда не имеет опыта работы с C ++, то они будут смешиваться в самых неподходящих и вызывающих ошибки местах.

Я вполне уверен, что переход на компилятор C ++ окажет огромное негативное влияние на будущее. В долгосрочной перспективе вы, вероятно, выиграете, но это может занять годы.

Лучше всего написать библиотеку строк (на языке C), которая поможет решить проблемы, с которыми вы сталкиваетесь. Затем заставьте своих разработчиков использовать библиотеку. Рассматривали ли вы использование альтернативных безопасных версий функций, таких как snprintf, strncpy и т. Д. Если у вашего компилятора этих функций уже нет, используйте этот интерфейс и напишите свой собственный.

Если вы действительно хотите использовать C ++, сделайте это в следующем проекте. А пока ведите список проблем с этим проектом, чтобы вы могли продать управление, полагая, что C ++ в этом следующем проекте лучше, чем C. Если вы не пишете драйверы устройств или математические алгоритмы, которые легко продать.

0 голосов
/ 01 октября 2010

C ++ разработан, чтобы быть в основном обратно совместимым, поэтому обычно довольно легко переключить проект C на C ++. (Переключение мышления и программирование - это отдельная история.)

Основные вещи, на которые стоит обратить внимание:

  • Если в коде C есть какие-либо функции, объявленные return_type f() (без списка аргументов), но функции действительно принимают аргументы, вам нужно их исправить. В C f() означает, что я не говорю, что это за типы аргументов. В C ++ f() в объявлении совпадает с f(void).
  • Вы должны скомпилировать main() с помощью компилятора C ++. C ++ позволяет некоторым вещам происходить до и после main, и это гарантирует, что это произойдет, как, вероятно, ожидают ваши библиотеки C ++.
  • Если некоторые части все еще будут скомпилированы с помощью компилятора C и только части с компилятором C ++, убедитесь, что вы понимаете extern "C" rules .

Существуют и другие придирчивые отличия, в которых поведение C и C ++ отличается, но они не очень часто вызывают проблемы.

Стоит ли начинать микширование в C ++ - решать только вам и вашей команде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...