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

Как найти (и заменить) все старые типы данных типа C в моем исходном коде на С++?

Как я могу найти все старые C-стиль в моем источнике?

Я использую Visual Studio, возможно, есть некоторые предупреждения о компиляторе, которые я должен включить?

4b9b3361

Ответ 1

GCC имеет опцию -Wold-style-cast, которая предупредит вас, если она найдет какие-либо приведения в стиле C.

Ответ 2

Я не знаю о компиляторе, который сообщает об этом, или что-то еще встроенное в Visual Studio.

Однако, здесь Perl script, который будет искать исходное дерево и найти все приведения стиля C в вашем источнике. Он работает достаточно хорошо, чтобы отслеживать их.

Ответ 3

К сожалению, в Visual С++ отсутствует предупреждение о компиляторе, которое указывает на эти приведения (по крайней мере, не на то, что я знаю), хотя похоже, что PC-Lint предоставляет предупреждение/примечание, которое предупреждает вас, если вы используете старинный стиль. Зависит, если вы готовы потратить деньги на PC-Lint - по моему мнению, это определенно стоит для всех проблем, которые вы можете найти с ним...

Ответ 4

Зачем вам это нужно? Вы хотите избавиться от всех из них?

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. Но это не означает, что вам нужно искать для старых в вашем коде и попытаться избавиться от всех из них. На самом деле это не проблема. Просто не тратьте впустую свое время. Вы можете потратить его на поиск и удаление некоторого устаревшего кода. Это было бы более полезно для вашей базы кода.