如何在我的C ++源代码中查找(并替换)所有旧的C风格数据类型转换?

时间:2009-08-13 15:07:42

标签: c++ c visual-c++ casting code-analysis

如何在源代码中找到所有旧的C风格演员?

我正在使用Visual Studio,可能有一些编译器警告,我必须启用?

4 个答案:

答案 0 :(得分:24)

GCC有-Wold-style-cast选项,如果找到任何C风格的演员表,它会发出警告。

答案 1 :(得分:7)

我不知道报告这些的编译器开关,或Visual Studio中内置的任何其他内容。

但是,这里有一个Perl script,它将搜索您的源代码树并查找源代码中的所有C样式转换。它可以很好地跟踪它们。

答案 2 :(得分:6)

不幸的是,在Visual C ++中没有一个编译器警告指出这些强制转换(至少不是我所知道的那个),虽然它看起来像PC-Lint确实提供警告/注释,如果你使用的话会发出警告旧式演员。取决于你是否愿意花钱购买PC-Lint - 在我看来,它绝对值得你能找到的所有问题......

答案 3 :(得分:-10)

你为什么需要那个?你想摆脱所有这些吗?

基本类型(如(double))的C风格转换是安全的,看起来比static_cast<double>()好得多。我个人更喜欢这种风格。

在多态类的情况下,C风格的演员表的问题被夸大了。仅当您使用多重继承并且必须进行交叉强制转换时,它可能是一个问题。默认情况下,C风格的强制转换在那里不起作用。但在大多数情况下,()的工作原理与static_cast<>()完全相同,我不会浪费时间更换它们。无论如何,对于多态类型,我在编写新代码或改变某些东西时使用C ++风格的强制类型。

更新:

伙计们,我似乎不太清楚地表达了我的观点。是的,我知道这个理论:C ++ - 演员是好的,C演员是邪恶的。需要此规则(以及大多数其他规则)来保存C ++中的新手。但这并不意味着你总是需要遵循它。

我的观点是C风格的演员表并不那么可怕。如果你写一些像

这样的函数
int convertFooToBar(double i_foo)

,没有理由在实现中使用C ++样式的强制转换。它们并不比(int)更安全,但看起来很混乱。在这种情况下,施放并不棘手。在演员阵容中没有任何坏事或狡猾:有时演员阵容很自然。

关于搜索:我不记得我在过去10年中正在搜索任何演员陈述,尽管我每天都在维护数百万行遗留C ++代码。我甚至不记得由于错误的铸造造成的任何严重问题。

最初的问题是关于替换已经写过的C风格的演员阵容。所以,我的答案是:

  

是的,C ++风格的演员阵容更好   比C风格更安全。但它   并不意味着你需要搜索   对于您的代码中的旧代码并尝试   摆脱所有这些。实际上,这不是一个真正的问题。只是不要浪费你的时间。您可以将其用于搜索和删除一些过时的代码。它对你的代码库更有用。