Особенности дизайна новичка для приложения C / C ++ - PullRequest
1 голос
/ 16 июля 2010

Я довольно новичок в программировании "больших" приложений. Сейчас я написал приложение для командной строки с несколькими тысячами строк кода в Visual C ++ 2010, которое прекрасно компилируется и работает. Большая часть кода совместима с C (я думаю), однако я нашел полезным использовать некоторые конструкции C ++ здесь и там. Например, иногда я использовал new / delete вместо malloc / free для вызова конструктора или для удобства использовал std :: vector или std :: set. Я поместил весь свой код примерно в 25 .h файлов, за исключением int main (), который сейчас находится в .cpp файле.

Мои конкретные вопросы:

  • Я предполагаю, что весь мой код скомпилирован как код C ++. Имеет ли смысл делать некоторые части кода по-настоящему совместимыми с C? Могу ли я иметь Visual Studio скомпилировать его как C тогда? Для больших частей программы было бы довольно просто сделать их совместимыми с C (например, заменить new на malloc, функцию инициализатора и т. Д.), Для некоторых частей сложнее (преобразовать std :: vector). Или это имело бы смысл только если бы все было C? Какие будут преимущества? В качестве альтернативы, имеет ли смысл конвертировать все в C ++? Например, используйте new вместо malloc и std :: string вместо char *.

  • Я предполагаю, что не предполагается иметь весь код в файлах .h. Как я должен поместить свой код в файлы? За исключением немногих, у меня не очень большие классы. Большая часть моего кода - процедуры и функции.

Мои две главные проблемы - это эффективность и достойный стандарт программирования. Портативность сейчас не проблема.

Большое спасибо !!

Ответы [ 3 ]

2 голосов
/ 16 июля 2010

IMO, в 2010 году нет необходимости быть совместимым с "C". Просто используйте C ++ и все его преимущества (STL, boost, все это джаз ...)

AFAIK, размещение кода в заголовочных файлах не является обычной практикой, обычно код помещается в файлы реализации (.c, .cpp, ...).

Размещение кода в файлах C / CPP (вместо файлов заголовков) позволит вам оптимизировать зависимости времени компиляции (предварительные объявления, PIMPL, ...) и ограничить видимость непубличных данных, которые не нужны «пользователям» какой-то кусок кода, чтобы увидеть.

Использование стандартных библиотек поможет стабильности, удобочитаемости и поддержанию кода в долгосрочной перспективе, уменьшая потенциальные ошибки, которые могут / могут возникнуть при работе со сложными структурами и алгоритмами (например, проще иметь дело с std :: vector чем массивы и std :: string чем char *)

М.

1 голос
/ 16 июля 2010

Что касается материала .h / .c / .cpp, то интерфейсы идут в заголовочных файлах, а компилируемые объекты - в файлах .c / cpp.

Так что если у вас есть модуль, который вычисляетвиджеты, вы бы поместили прототип функции calculate_widget в файл .h, а код, который фактически делает это, в файл .c.Любой другой модуль, который хочет вычислить виджеты #include s widgetcalc.h и вызывает calculate_widgets.Любой код, не вызываемый внешними модулями, затем может быть объявлен в статических функциях, что помогает в оптимизации и предотвращает конфликты ваших пространств имен.

Как правило, если строка кода компилируется с некоторым количеством инструкций процессораон не принадлежит .h файлу.

0 голосов
/ 16 июля 2010

Если файл, который вы компилируете, имеет расширение "C", он будет скомпилирован как C. Если он называется "CPP", он скомпилируется как C ++.

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

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