Подтвердить что ты не робот

Неплохо ли использовать C-функции на С++?

Например printf вместо cout, scanf вместо cin, используя макросы #define и т.д.?

4b9b3361

Ответ 1

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

Ответ 2

Это зависит от того, какие функции. Использование макросов define в С++ сильно недооценивается и по уважительной причине. Вы почти всегда можете заменить использование макроса define чем-то более удобным и безопасным в С++ (шаблоны, встроенные функции и т.д.).

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

И еще одно: при всем уважении к множеству возможностей форматирования потока, для таких вещей, как простые отладочные распечатки, IMHO вы просто не можете победить сжатость printf и ее строку формата.

Ответ 3

Я бы сказал, что единственными, которые действительно вредны для смешивания, являются пары между malloc/free и new/delete.

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

Ответ 4

Вы должны обязательно использовать printf вместо cout. Последнее позволяет вам делать большинство или все элементы управления форматированием printf, но делает это в состоянии. То есть текущий режим форматирования сохраняется как часть (глобального) объекта. Это означает, что плохой код может оставить cout в состоянии, в котором последующий вывод будет искажен, если вы не reset все форматирование каждый раз, когда вы его используете. Это также наносит ущерб использованию с резьбой.

Ответ 5

В большинстве случаев есть лучшие решения, но не все.

Например, люди часто используют memcpy. Я бы почти никогда этого не делал (кроме кода на самом низком уровне). Я всегда использую std::copy, даже на указателях.

Тот же подсчет для подпрограмм ввода/вывода. Но верно, что иногда C-стиль printf значительно проще в использовании, чем cout (особенно при регистрации). Если Boost.Format не является опцией, то уверен, используйте C.

#define - совсем другой зверь. На самом деле это не C-единственная функция, и в С++ есть много законных применений. (Но гораздо больше, чем arent.)

Конечно, вы никогда не использовали его для определения констант (для чего const), а также для объявления встроенных функций (используйте inline и шаблоны!).

С другой стороны, часто бывает полезно создавать утверждения отладки и обычно как инструмент генерации кода. Например, Im-модульные шаблоны классов без использования макросов, это будет настоящей болью в * ss. Использование макросов здесь неплохо, но оно сохраняет буквально тысячи строк кода.

Ответ 6

Для распределений я бы вообще избегал использования malloc/free и просто придерживался нового/delete.

Ответ 7

Не совсем, printf() работает быстрее, чем cout, а библиотека iostream С++ довольно велика. Это зависит от предпочтений пользователя или самой программы (она нужна? И т.д.). Кроме того, scanf() больше не подходит для использования, я предпочитаю fgets().

Ответ 8

Что можно использовать или не только зависит от компилятора, который будет использоваться. Поскольку вы программируете на С++, на мой взгляд, чтобы максимизировать совместимость, лучше использовать то, что предоставляет С++ вместо c-функций, если у вас нет других вариантов.

Ответ 9

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

Ответ 10

Я бы опубликовал комментарий к другому ответу, но так как не могу... C printf() лучше, чем С++ iostream из-за интернационализации. Хотите перевести строку и поместите встроенный номер в другое место? Невозможно сделать это с помощью ostream. Спецификация формата printf() - это совсем маленький язык для себя, интерпретируемый во время выполнения.