Существуют лучшие решения для большинства случаев, но не для всех.
Например, люди довольно часто используют memcpy
. Я бы почти никогда не делал этого (за исключением действительно низкоуровневого кода). Я всегда использую std::copy
, даже на указателях.
То же самое относится к процедурам ввода / вывода. Но это правда, что иногда стиль C printf
значительно проще в использовании, чем cout
(особенно при ведении журнала). Если Boost.Format не является опцией, тогда обязательно используйте C.
#define
совершенно другой зверь. Это на самом деле не только функция C, и для C ++ есть много законных применений. (Но многие другие, которых нет.)
Конечно, вы никогда не будете использовать его для определения констант (для этого const
) и для объявления встроенных функций (используйте inline
и шаблоны!).
С другой стороны, часто полезно генерировать отладочные утверждения и, как правило, как инструмент генерации кода. Например, я занимаюсь модульным тестированием шаблонов классов, и без интенсивного использования макросов это будет настоящей болью в * ss. Использование макросов здесь нехорошо, но экономит буквально тысячи строк кода.