Как я могу найти все старые C-стиль в моем источнике?
Я использую Visual Studio, возможно, есть некоторые предупреждения о компиляторе, которые я должен включить?
Как я могу найти все старые C-стиль в моем источнике?
Я использую Visual Studio, возможно, есть некоторые предупреждения о компиляторе, которые я должен включить?
GCC имеет опцию -Wold-style-cast
, которая предупредит вас, если она найдет какие-либо приведения в стиле C.
Я не знаю о компиляторе, который сообщает об этом, или что-то еще встроенное в Visual Studio.
Однако, здесь Perl script, который будет искать исходное дерево и найти все приведения стиля C в вашем источнике. Он работает достаточно хорошо, чтобы отслеживать их.
К сожалению, в Visual С++ отсутствует предупреждение о компиляторе, которое указывает на эти приведения (по крайней мере, не на то, что я знаю), хотя похоже, что PC-Lint предоставляет предупреждение/примечание, которое предупреждает вас, если вы используете старинный стиль. Зависит, если вы готовы потратить деньги на PC-Lint - по моему мнению, это определенно стоит для всех проблем, которые вы можете найти с ним...
Зачем вам это нужно? Вы хотите избавиться от всех из них?
C-стиль для основных типов, таких как (double)
, безопасен и выглядит намного лучше, чем static_cast<double>()
. Я лично предпочитаю этот стиль.
В случае полиморфных классов проблема слияний в стиле C сильно преувеличена imho. Это может быть проблемой, только если вы используете множественное наследование и должны выполнять кросс-литье. По умолчанию C-style casts не будет работать там. Но в большинстве случаев ()
работает точно так же, как static_cast<>()
, и я не буду тратить время на их замену. Во всяком случае, для полиморфных типов я использую С++-стили при написании нового кода или что-то изменить.
UPDATE:
Ребята, кажется, я выразил свое мнение не так четко. Да, я знаю теорию: С++ - отличное, C-cast - зло. Это правило (и большинство других) необходимо для сохранения новичков с С++. Но это не значит, что вам всегда нужно следовать за ним.
Моя точка зрения заключается в том, что касты C-стиля не так страшны. Если вы напишете какую-то функцию типа
int convertFooToBar(double i_foo)
нет никаких оснований использовать С++-стиль в реализации. Они не безопаснее, чем (int)
, но выглядят беспорядочно. В этом случае кастинг не является сложным. Это ничто плохое или сложное в литье вообще: иногда отливки естественны.
О поиске: Я не помню, что я искал любой оператор высказывания за последние 10 лет, хотя я поддерживаю несколько миллионов строк устаревшего кода на С++ на ежедневной основе. Я даже не помню серьезных проблем из-за неправильного кастинга.
Оригинальный вопрос касается замены уже написанных стилей C-стиля. Итак, мой ответ:
Да, стили С++ лучше и безопаснее, чем в стиле C. Но это не означает, что вам нужно искать для старых в вашем коде и попытаться избавиться от всех из них. На самом деле это не проблема. Просто не тратьте впустую свое время. Вы можете потратить его на поиск и удаление некоторого устаревшего кода. Это было бы более полезно для вашей базы кода.